使用SXSSFWorkbook 向excel中写数据时,报错如标题。
我的场景:将Map<String, List<String>>中存储的数据写入不同excel文件中。
异常原因:只创建了一个SXSSFWorkbook对象,这样在写第2个excel时数据就已经存在了。
解决方法:将创建SXSSFWorkbook对象放入循环体中
/**
* write to excel
*/
System.out.println("start write to excel...");
// 问题所在
/*SXSSFWorkbook wb = new SXSSFWorkbook(rowSize);
SXSSFSheet sheet1 = wb.createSheet("sheet1");
SXSSFRow headRow = sheet1.createRow(0);
SXSSFCell headRowCell = headRow.createCell(0);
headRowCell.setCellValue("data");*/
int rowSize = 100;
// 循环写入数据
map.forEach((key, value) -> {
try {
// 创建表头
SXSSFWorkbook wb = new SXSSFWorkbook(rowSize);
// 单元格样式(垂直居中)
XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle();
//水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//设置为文本格式
cellStyle.setDataFormat(BuiltinFormats.getBuiltinFormat("TEXT"));
SXSSFSheet sheet1 = wb.createSheet("sheet1");
SXSSFRow headRow = sheet1.createRow(0);
SXSSFCell headRowCell = headRow.createCell(0);
cell.setCellStyle(style);
headRowCell.setCellValue("data");
// 写入数据
int jishu = 0;
for (String s : value) {
SXSSFRow row = sheet1.createRow(jishu + 1);
SXSSFCell cell = row.createCell(0, CellType.STRING);
cell.setCellStyle(style);
cell.setCellValue(s);
jishu++;
if (jishu % rowSize == 0) {
sheet1.flushRows();
}
}
key = URLDecoder.decode(key, "UTF-8");
FileOutputStream fileOutputStream = new FileOutputStream(outpath + key + ".xlsx");
wb.write(fileOutputStream);
// 关闭流
fileOutputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
});