java-Easyexcel导出excel设置单元格为文本格式(含代码) 在使用EasyExcel导出excel模板时。我们会发现导出的日期和大长度数字都会自动更换格式,不是文本格式。并且在空白单元格
在使用EasyExcel导出excel模板时。我们会发现导出的日期和大长度数字都会自动更换格式,不是文本格式。并且在空白单元格输入日期也是格式有问题的,如下所示,可以看到当输入相同的日期时,格式会变成自适应,不是文本格式了,所以我们需要从代码里设置,导出表格的单元格固定是文本(我的项目中使用EasyExcel是2.0+的版本,不同版本可能代码实现是不同的,但是原理都是一样的)。
新建一个handler实现SheetWriteHandler接口,在创建单元格时设置格式为文本
public class CustomSheetWriteHandler implements SheetWriteHandler { // 设置100列column private static final Integer COLUMN = 100; @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { for (int i = 0; i < COLUMN; i++) { // 设置为文本格式 SXSSFSheet sxssfSheet = (SXSSFSheet) writeSheetHolder.getSheet(); CellStyle cellStyle = writeWorkbookHolder.getCachedWorkbook().createCellStyle(); // 49为文本格式 cellStyle.setDataFORMat((short) 49); // i为列,一整列设置为文本格式 sxssfSheet.setDefaultColumnStyle(i, cellStyle); } }}
因为在自己的项目中发现,如果只是完成上面第一步,会发现导出的模板中,含有数据的单元格的格式还是常规,当重新输入后,日期又自适应,变成不是文本字符串了,所以我这里还是设置了含有数据的单元格的格式为文本
只需要在导出模板的实体类的字段上加上注解即可:@ContentStyle(dataFormat = 49)
@Datapublic class ExpenseTemplateModel { @HeadFontStyle(color= 10) @ExcelProperty(value = "所属年月") @ContentStyle(dataFormat = 49) private String expenseMonth; @HeadFontStyle(color= 10) @ExcelProperty(value = "会计主体") @ContentStyle(dataFormat = 49) private String borrowerName; @HeadStyle(fillForegroundColor = 22) @ExcelProperty(value = "凭证号") @ContentStyle(dataFormat = 49) private String voucherNo; @HeadFontStyle(color= 10) @ExcelProperty(value = "摘要") private String summary; @HeadFontStyle(color= 10) @ExcelProperty(value ="科目") private String subjectName; @HeadFontStyle(color= 10) @ExcelProperty(value ="部门") private String orgName; // @HeadFontStyle(color= 10) @HeadStyle(fillForegroundColor = 22) @ExcelProperty(value ="人员") private String personnel; @HeadFontStyle(color= 10) @ExcelProperty(value ="金额") @ContentStyle(dataFormat = 49) private String amount; @HeadStyle(fillForegroundColor = 22) @ExcelProperty(value ="ID号") @ContentStyle(dataFormat = 49) private String idNo; @HeadStyle(fillForegroundColor = 22) @ExcelProperty(value ="调整类型") private String remark;}
三、在导出模板注册第一步新建的handler类
.reGISterWriteHandler(new CustomSheetWriteHandler())
下面是导出模板的实现类,用于测试:
public void downloadOtherExpenseTemplate(httpservletResponse response) { List<Remark> remarks = remarkService.listAll(new RemarkQueryBo()); List<ExpenseTemplateModel> expenseTemplateModels = new ArrayList<>(); // 添加样例数据 ExpenseTemplateModel expenseTemplateModel = new ExpenseTemplateModel(); expenseTemplateModel.setExpenseMonth("2022-09"); expenseTemplateModel.setBorrowerName("测试有限公司1"); expenseTemplateModel.setSummary("测试用情况"); expenseTemplateModel.setSubjectName("测试经费"); expenseTemplateModel.setOrgName("测试会"); expenseTemplateModel.setPersonnel("张达达"); expenseTemplateModel.setAmount("300"); expenseTemplateModels.add(expenseTemplateModel); OutputStream outputStream = null; try { String fileName = "测试模板"; outputStream = response.getOutputStream(); response.setContentType("multipart/form-data"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(fileName + ".xlsx", "UTF-8")); EasyExcel.write(outputStream, ExpenseTemplateModel.class).autoCloseStream(true) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new CustomSheetWriteHandler()) .sheet(fileName).doWrite(expenseTemplateModels); } catch (IOException e) { throw new ResultException("导出excel异常: " + e.getMessage()); } finally { IOUtils.closeQuietly(outputStream); }}
可以看到导出的模板每个单元格的格式都是文本了。
来源地址:https://blog.csdn.net/qq798867485/article/details/129749594
--结束END--
本文标题: java-EasyExcel导出excel设置单元格为文本格式(含代码)
本文链接: https://www.lsjlt.com/news/406341.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0