iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java-EasyExcel导出excel设置单元格为文本格式(含代码)
  • 952
分享到

java-EasyExcel导出excel设置单元格为文本格式(含代码)

javaexcel开发语言 2023-09-13 20:09:53 952人浏览 独家记忆
摘要

java-Easyexcel导出excel设置单元格为文本格式(含代码) 在使用EasyExcel导出excel模板时。我们会发现导出的日期和大长度数字都会自动更换格式,不是文本格式。并且在空白单元格

java-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文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作