shaokel 2021-10-21 10:11 采纳率: 95.2%
浏览 42
已结题

Java中使用easypoi的导出的文件打开报错

上传到ftp显示的是xls后缀,下载后变成了xlsx后缀,导致打开excel报错
如果直接把xlsx后缀改为xls后缀,文件是可以正常打开的
下面是我导出的代码

@PostMapping("/spExport")
    public void spExport(@RequestBody Map<String, Object> reqMap) throws Exception {
        try {
            Map<String, Object> condition = modalController.getInterfaceAndParam(String.valueOf(reqMap.get("id")));
            //设置表头
            Map<String, Object> headerMap = new HashMap<>();//存放表头
            List<Map<String, Object>> columns = (List) condition.get("columns");
            columns.forEach(item -> {
                String headerMc = StringHelper.toString(item.get("dataIndex"));
                String title = StringHelper.toString(item.get("title"));
                headerMap.put(headerMc, title);
            });
            List<ExcelExportEntity> colList = new ArrayList<>();

            Iterator<Map.Entry<String, Object>> iterator = headerMap.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, Object> next = iterator.next();
                String key = next.getKey();
                ExcelExportEntity zg = new ExcelExportEntity(StringHelper.toString(next.getValue()), key);
                colList.add(zg);
            }

            Map<String, Object> params = (Map) condition.get("params");
            List<Map<String, Object>> ywYwhxJbxxes = hxService.dcspQuery(params);
            org.apache.poi.ss.usermodel.Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("表", "表"), colList, ywYwhxJbxxes);
            modalController.uploadExcelToFtp(workbook, "/dcsp/" + reqMap.get("sqsj"), StringHelper.toString(reqMap.get("id")));
        } catch (Exception e) {
            throw new ControllerException("导出失败", e);
        }
    }
 /**
       * 下载文件
       * @param {Object} data
       */
      downloadExcel(sqXx) {
        axios({
          url: '/dcsp/downloadExcel/' + sqXx.id,
          method: 'GET',
          responseType: 'blob',
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          const blob = new Blob([res])
          const fileName = '申请记录导出.xls'
          const elink = document.createElement('a')
          elink.download = fileName
          elink.style.display = 'none'
          elink.href = URL.createObjectURL(blob)
          document.body.appendChild(elink)
          elink.click()
          URL.revokeObjectURL(elink.href) // 释放URL 对象
          document.body.removeChild(elink)
        })
      },

  • 写回答

1条回答 默认 最新

  • shaokel 2021-10-21 10:40
    关注

    看了一下源码,发现ExportParams可以修改下载格式,
    ExportParams类有一个构造方法

    public ExportParams(String title, String sheetName, ExcelType type) {
            this.title = title;
            this.sheetName = sheetName;
            this.type = type;
        }
    

    ExcelType类中有两个格式
    一个是HSSF,一个是XSSF
    分别对应xlx,xlsx后缀,
    所以只需要修改你所需要的后缀即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 修改了问题 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效