柯 2022-09-09 11:57 采纳率: 0%
浏览 22

apache poi导出乱码怎么解决

//创建工作薄
        response.reset();
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet(sheetName);
        excelCross(wb, sheet, sheetName, Integer.parseInt(column.get(column.size() - 1)), data,header);
        response.setCharacterEncoding("UTF-8");
//        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setContentType("application/x-msdownload");
        try {
            //获取浏览器名称
            String agent = request.getHeader("user-agent");
            String filename = sheetName + ".xls";
            //不同浏览器需要对文件名做特殊处理
            // 火狐浏览器
            if (agent.contains("Firefox")) {
                filename = "=?UTF-8?B?"
                        + new BASE64Encoder().encode(filename.getBytes("utf-8"))
                        + "?=";
                filename = filename.replaceAll("\r\n", "");
            } else { // IE及其他浏览器
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+", " ");
            }
            //推送浏览器
            response.setHeader("Content-Disposition", "attachment;filename=" + filename);
            wb.write(response.getOutputStream());
            String path3 = "E:\\xxx\\盒内文件目录.xlsx"; // 测试服地址
            InputStream is = new FileInputStream(path3);
            byte[] b = new byte[4096];
            int size = is.read(b);
            while (size > 0) {
                response.getOutputStream().write(b, 0, size);
                size = is.read(b);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

vm.$pcipTools.ajax({                    
      url: 'public/oa/exportArchiveMain',                    
      data: data,                     
      async: false,                    
      Accept: 'application/json,text/plain, */*',                    
      'Content-Type': 'application/octet-stream;charset=UTF-8',                    
      // responseType: 'blob', 
      responseType: 'arraybuffer',
      method: 'post',                    
      success: function (response) {  
        const link = document.createElement("a"); //创建a标签
        let blob = new Blob([response], { type: "application/vnd.ms-excel;charset=UTF-8" }); // response就是接口返回的文件流
        let objectUrl = URL.createObjectURL(blob);
        link.href = objectUrl;
        link.download = fileName; // 自定义文件名
        link.click(); // 下载文件
        URL.revokeObjectURL(objectUrl); // 释放内存
      }        
    })

后台

img

前台

img

结果:

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 13:03
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 9月9日