8
触发场景描述
1、只能使用csv 2、动态头,无法使用Java类及注解写入 3、EasyExcel-3.1.1版本 4、导出文件【长字符串的数字被转成了科学计数法,所以想通过转换单元格格式为文本来解决】
触发Bug的代码 /**
* 生成文件模板,写入流
* @param os OutputStream
* @param type 文件类型 CSV-固定不变
*/
public void writeTemplate(OutputStream os, ExcelTypeEnum type) throws IOException {
EasyExcel.write(os).head(userFileContext.getHead())
.excelType(type)
.sheet()
.registerWriteHandler(new CustomSheetWriteHandler())
.doWrite(Collections.emptyList());
os.close();
}
public class CustomSheetWriteHandler extends AbstractColumnWidthStyleStrategy implements SheetWriteHandler {
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Sheet sheet = writeSheetHolder.getSheet();
//设置前100列的单元格格式为文本
for (int i = 0; i < 100; i++) {
CellStyle cellStyle = writeWorkbookHolder.getCachedWorkbook().createCellStyle();
cellStyle.setDataFormat((short) 49);
sheet.setDefaultColumnStyle(i, cellStyle);
}
}
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList,
Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
Sheet sheet = writeSheetHolder.getSheet();
sheet.setColumnWidth(cell.getColumnIndex(), 5000);
}
}
提示的异常或者没有达到的效果
1、导出数据,长字符串数字被转为了科学计数法 2、Sheet的前100列的所有单元格格式没有转换为文本