最近在写一个excel导出功能遇到了问题,想请教一下大佬们

后端采用springboot+poi,在postman中测试接口是可以进行excel下载的。

@PostMapping("/out")
public Object outExcelDemo(HttpServletResponse response) throws IOException, IllegalAccessException {
    //文件名
    String fileName = "活动报名情况一览表";
    //sheet名
    String sheetName = "报名情况sheet";

    //表头集合,作为表头参数
    List<String> titleList = new ArrayList<>();
    titleList.add("用户账户");
    titleList.add("用户名");
    titleList.add("报名时间");
    titleList.add("是否完成");

    List<String> l1 = new ArrayList<>();
    l1.add("1h");
    l1.add("1h");
    l1.add("1");
    l1.add("1");
    List<String> l2 = new ArrayList<>();
    l2.add("2");
    l2.add("2");
    l2.add("2h");
    l2.add("2h");
    ArrayList<List<String>> list = new ArrayList<>();
    list.add(l1);
    list.add(l2);
    //调取封装的方法,传入相应的参数
    XSSFWorkbook workbook = ExcelUtil.createExcel(sheetName, titleList, list);

    //输出Excel文件
    OutputStream output = response.getOutputStream();
    // response.reset();
    //中文名称要进行编码处理
    response
            .setHeader("Content-Disposition", "attachment; filename=demo.xlsx");
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setCharacterEncoding("utf-8");
    workbook.write(output);
    output.close();
    return null;
}

但是在前端进行接收下载的时候浏览器就会一直爆红。

const downloadExcel = () => {

  request({

    url: '/demo/out',

    method: 'POST',

    responseType: 'arraybuffer', // 指定响应类型为二进制数据

    // responseType: 'blob', // 指定响应类型为二进制数据

  })

    .then((response) => {

      // const blob = new Blob([response.data], {

      //   type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',

      // })

      // const url = window.URL.createObjectURL(blob)

      // const link = document.createElement('a')

      // link.href = url

      // link.setAttribute('download', 'demo4.xlsx') // 指定下载的文件名

      // document.body.appendChild(link)

      // link.click()

      // 释放URL对象

      // window.URL.revokeObjectURL(url)

      console.log(response.data)

    })

    .catch(function (error) {

      console.error('Excel生成失败', error)

    })

}

具体爆红是这样的,responseType: 'blob'也不行

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,这里提供一个使用阿里云的 easyexcel 库实现 excel 导入导出功能Java 示例代码,供参考: 1. 导入功能 ``` import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read.builder.ExcelReaderBuilder; import com.alibaba.excel.read.listener.ReadListener; import java.io.File; import java.util.List; public class ImportFunction { public static void importData(String filePath, Class dataClass, ReadListener listener) { File file = new File(filePath); ExcelReaderBuilder builder = EasyExcel.read(file, dataClass, listener); builder.sheet().doRead(); } } ``` 这个示例中,我们用了一个 importData 方法来实现导入功能。该方法接受一个文件路径、数据类和一个读取监听器作为参数。该方法通过 EasyExcel.read 方法创建一个 ExcelReaderBuilder 对象,并设置数据类和读取监听器。然后调用 doRead 方法开始读取 excel 文件。 2. 导出功能 ``` import com.alibaba.excel.EasyExcel; import java.io.File; import java.util.List; public class ExportFunction { public static void exportData(String filePath, List data, Class dataClass) { File file = new File(filePath); EasyExcel.write(file, dataClass).sheet().doWrite(data); } } ``` 这个示例中,我们用了一个 exportData 方法来实现导出功能。该方法接受一个文件路径、数据列表和数据类作为参数。该方法通过 EasyExcel.write 方法创建一个 ExcelWriter 对象,并设置数据类。然后调用 doWrite 方法将数据列表excel 文件。 在你的程序中,你可以调用这两个方法来实现 excel 导入导出功能。例如: ``` // 导入数据 ImportFunction.importData("data.xlsx", MyData.class, new MyDataListener()); // 导出数据 List<MyData> dataList = getDataList(); ExportFunction.exportData("output.xlsx", dataList, MyData.class); ``` 以上示例中,我们首先调用 ImportFunction 类中的 importData 方法将 data.xlsx 文件中的数据导入到 MyData 类型的 dataList 中,使用 MyDataListener 监听器处理数据。然后调用 ExportFunction 类中的 exportData 方法将 dataList 中的数据导出到 output.xlsx 文件中,数据类型也是 MyData。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值