首页 新闻 会员 周边

java使用poi或jxl导出excel乱码

0
[已解决问题] 解决于 2019-03-08 14:51
1  OutputStream out = response.getOutputStream();
2         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
3         response.setCharacterEncoding("UTF-8");
4         response.setContentType("application/vnd.ms-excel");
5         response.setHeader("Content-disposition", "attachment;filename="+ sdf.format(new Date())+".xls");
6         ExcelUtil.exportExcel(dataList,"cure_plans.xls",out);
public static <T> void exportExcel(List<Map> dataList, String filename, OutputStream out){
       /* try {
            //读取模板
            InputStream in = new FileInputStream("C:\\Users\\yinbx\\IdeaProjects\\JCogent\\cogent-common\\src\\main\\java\\com\\cogent\\template\\cure_plans.xls");
            //通过模板创建工作簿
            HSSFWorkbook wb = new HSSFWorkbook(in);
            //获取shell
            HSSFSheet sheet = wb.getSheetAt(0);
            //获取模板的内容
            HSSFRow Trow = sheet.getRow(2);
            int i=3;
            HSSFRow row = null;
            HSSFCell  cell = null;
            for (Map map: dataList) {//遍历数据集填充到excel
                row = sheet.createRow(i);
                for(int j=0; j<Trow.getLastCellNum(); j++){
                    cell = row.createCell((short)j);
                    //cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                    cell.setCellValue(map.get(Trow.getCell(j).getStringCellValue()).toString());
                }
                i++;
            }

            wb.write(out);
            out.close();
        }catch (IOException e){
            System.out.println("文件流异常");
            e.printStackTrace();
        }*/

        try {
            WorkbookSettings settings = new WorkbookSettings();
            settings.setWriteAccess(null);
            settings.setEncoding("UTF-8");
            Workbook wb = Workbook.getWorkbook(new File("C:\\Users\\yinbx\\IdeaProjects\\JCogent\\cogent-common\\src\\main\\java\\com\\cogent\\template\\cure_plans.xls"));
            WritableWorkbook wwb = Workbook.createWorkbook(out, wb,settings);
            WritableSheet sheet = wwb.getSheet(0);
            int i =3;
            Label label;
            for(Map map : dataList){
                for(int j =0; j<sheet.getColumns(); j++){
                    label =new Label(j,i,map.get(sheet.getCell(j,2).getContents()).toString());
                    sheet.addCell(label);
                }
                i++;
            }
            wwb.write();
            wwb.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (RowsExceededException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        }
    }

文件下载之后内容全是乱码,尝试改过响应头的格式

究其一生的主页 究其一生 | 初学一级 | 园豆:4
提问于:2018-05-03 15:47
< >
分享
最佳答案
0

是中文乱码?还是导出文件整个都是乱码的?

奖励园豆:5
、熙和 | 小虾三级 |园豆:1508 | 2018-05-03 17:33

整个文件全部乱码

究其一生 | 园豆:4 (初学一级) | 2018-05-03 17:41

@究其一生: 先确定一下是接口的问题, 还是前端调用的问题,直接地址栏访问接口, 如果直接是下载文件,这个文件没问题的话就是前端调用的问题,
看了你贴的代码, 没发现什么问题, 先排查一下吧, 我之前碰到过前端调用方式不对,导致文件是乱码的,后来确认直接地址栏访问接口, 弹出的下载文件没问题, 后来叫前端去解决了QAQ

、熙和 | 园豆:1508 (小虾三级) | 2018-05-03 17:57

@、熙和: 这个测试的时候我是用的swagger测试的,可能和正常掉用不同,明天我用实际操作访问试一下

究其一生 | 园豆:4 (初学一级) | 2018-05-03 18:21

@究其一生: 这个前端应该是location.href='xxxx'调用的, swagger那个是发的ajax请求, 当然会有问题啦

、熙和 | 园豆:1508 (小虾三级) | 2018-05-03 18:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册