JAVA、Excel文件导出工具类返回数据head设置及文件名拼接

为了返回文件流给前端下载,需要针对response类进行操作,如:

import javax.servlet.http.HttpServletResponse;

public JsonResult<String> exportExcel(HttpServletResponse response, String fileName, List<T>[] lists, String[] sheetNames, String path) throws Exception {
    if (lists.length != sheetNames.length) return JsonResult.fail("数组长度不一致");

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=" + ExcelFragment.encodingFilename(fileName));

    OutputStream out = response.getOutputStream();
    workbook = new HSSFWorkbook();// 产生工作薄对象

    // ... (remaining code)

    try {
        workbook.write(out);
        return JsonResult.success(fileName);
    } finally {
        out.flush();
        out.close();
    }
}

设置了ContentType和Header。
并对stream流数据进行了write。

导出后,后端生成的文件名变成了:%E4%B8%80%E7%BA%A7%E5%88%86%E8%B4%A7%E5%B7%A6%E4%B8%8A%E6%90%9C%E7%B4%A2%E6%A1%86%E6%95%
乱码了,应该进行设置Content-Disposition头进行URL 解码。

如:

import java.net.URLDecoder;

// ...

public JsonResult<String> exportExcel(HttpServletResponse response, String fileName, List<T>[] lists, String[] sheetNames, String path) throws Exception {
    if (lists.length != sheetNames.length) return JsonResult.fail("数组长度不一致");

    response.setContentType("application/vnd.ms-excel");

    // 解码 URL 编码的文件名
    fileName = URLDecoder.decode(fileName, "UTF-8");

    response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");

    OutputStream out = response.getOutputStream();
    workbook = new HSSFWorkbook();// 产生工作薄对象

    // ...(其余代码)

    try {
        workbook.write(out);
        return JsonResult.success(fileName);
    } finally {
        out.flush();
        out.close();
    }
}

通过使用 URLDecoder.decode(fileName, “UTF-8”),在设置 Content-Disposition 头之前对文件名进行了 URL 解码。这样应该确保文件名以中文字符正确显示。

另付文件名拼接方法:

    protected String assemblyFileNameForXlsx(String name) throws UnsupportedEncodingException {
        // 获取当前日期和时分秒
        LocalDateTime currentDateTime = LocalDateTime.now();
        // 格式化日期时间字符串
        String formattedDateTime = currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"));
        // 拼接文件名
        String fileName = URLEncoder.encode(name + formattedDateTime, "UTF-8") + ".xlsx";
        return fileName;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴能够回答这个问题。可以使用Apache POI库来实现Java编写导入导出Excel文件工具类。该库可以对Excel文件进行读写操作,支持Excel 97-2003和Excel 2007及以上格式的文件。以下是一个简单的示例代码,可以参考: ``` import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.util.List; public class ExcelUtils { /** * 导出Excel文件 * * @param header Excel表头 * @param data Excel数据 * @param path 文件路径 * @throws Exception */ public static void exportExcel(List<String> header, List<List<Object>> data, String path) throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 写入表头 Row headerRow = sheet.createRow(0); for (int i = 0; i < header.size(); i++) { headerRow.createCell(i).setCellValue(header.get(i)); } // 写入数据 for (int i = 0; i < data.size(); i++) { Row row = sheet.createRow(i + 1); List<Object> rowData = data.get(i); for (int j = 0; j < rowData.size(); j++) { Object value = rowData.get(j); if (value instanceof Number) { row.createCell(j).setCellValue(((Number) value).doubleValue()); } else { row.createCell(j).setCellValue(value.toString()); } } } // 保存文件 try (FileOutputStream outputStream = new FileOutputStream(path)) { workbook.write(outputStream); } } } ``` 以上代码使用了XSSFWorkbook对象来创建一个新的Excel文件。将表头和数据写入工作表中,并将保存到指定路径的文件中。请注意,此示例代码仅用于说明如何在Java中编写导入导出Excel文件工具类,实际应用场景可能需要根据具体要求进行更改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值