Open codesong99 opened 1 year ago
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
public class CsvExporter {
public void csvDownload(HttpServletResponse response, List<List<Object>> dataList, List<List<String>> headList) throws IOException {
response.setContentType("text/csv");
response.setCharacterEncoding("UTF-8");
// 设置文件名,并处理文件名中的特殊字符
String fileName = "example.csv";
String encodedFileName = java.net.URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString())
.replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName);
// 获取输出流
OutputStream out = response.getOutputStream();
// 添加BOM头
out.write(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});
// 使用EasyExcel导出CSV
ExcelWriter excelWriter = EasyExcel.write(out).excelType(ExcelTypeEnum.CSV).build();
WriteSheet writeSheet = EasyExcel.writerSheet(0, "Sheet1").head(headList).build();
excelWriter.write(dataList, writeSheet);
excelWriter.finish();
}
}
使用的版本是3.3.2,虽然3.3.0版本对Issue#3137提出的“导出CSV文件增加bom头”进行了支持,但是直接导出字节流时,仍缺少bom头,建议也对此进行修复。下面是示例代码