html 导出excel 列被合并,前端实现导出excel单元格合并和调整样式

有些业务场景需要导出excel表格,寻常这类需求其实是服务端完成,但是前端也有可以实现这类需求的库,这里我介绍最近使用过的三个库。

通用电子表格格式(CSF)

单元地址对象存储为{c:C, r:R},C和R是列号和行号。例如,单元格地址B5由单元地址对象表示{c:1, r:4}。

单元格范围对象存储为范围{s:S, e:E},其中S表示第一个单元格,E表示最后一个单元格。例如,范围A3:B7由单元格范围对象表示{s:{c:0, r:2}, e:{c:1, r:6}}

990d178fa2fc

单元对象的基本键值对

特殊工作表键(可通过sheet[key]进行访问,每个以!开头):

sheet['!ref']:代表图纸范围。与图纸一起使用的功能应使用此参数来确定范围。分配超出范围的单元格将不被处理。当遇到显示不出来内容时,请检查范围是否正确

sheet['!margins']:代表页边距的对象。默认值遵循Excel的“常规”预设。Excel还具有“宽”和“窄”预设,但它们存储为原始测量值。

sheet['!cols']:列属性对象的数组。列宽实际上是以规范化的方式存储在文件中的,以“最大位数宽度”(呈示的数字0-9的最大宽度,以像素为单位)衡量。解析后,列对象将在wpx字段中存储像素宽度,在字段中存储字符宽度以及在wch字段中存储最大位数MDW。

sheet['!rows']:行属性对象的数组,如文档稍后所述。每个行对象对包括

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先需要在项目中引入poi和poi-ooxml的依赖,然后可以通过以下代码来实现导出excel并动态合并相同内容单元格: ```java // 创建工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表 XSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建标题行 XSSFRow titleRow = sheet.createRow(0); titleRow.createCell(0).setCellValue("姓名"); titleRow.createCell(1).setCellValue("年龄"); titleRow.createCell(2).setCellValue("性别"); titleRow.createCell(3).setCellValue("地址"); // 创建数据行 List<User> userList = getUserList(); int rowIndex = 1; for (int i = 0; i < userList.size(); i++) { User user = userList.get(i); XSSFRow dataRow = sheet.createRow(rowIndex++); dataRow.createCell(0).setCellValue(user.getName()); dataRow.createCell(1).setCellValue(user.getAge()); dataRow.createCell(2).setCellValue(user.getGender()); dataRow.createCell(3).setCellValue(user.getAddress()); // 动态合并相同内容单元格 if (i > 0) { User prevUser = userList.get(i - 1); if (user.getName().equals(prevUser.getName())) { sheet.addMergedRegion(new CellRangeAddress( rowIndex - 2, rowIndex - 1, 0, 0)); } if (user.getAge() == prevUser.getAge()) { sheet.addMergedRegion(new CellRangeAddress( rowIndex - 2, rowIndex - 1, 1, 1)); } if (user.getGender().equals(prevUser.getGender())) { sheet.addMergedRegion(new CellRangeAddress( rowIndex - 2, rowIndex - 1, 2, 2)); } if (user.getAddress().equals(prevUser.getAddress())) { sheet.addMergedRegion(new CellRangeAddress( rowIndex - 2, rowIndex - 1, 3, 3)); } } } // 输出Excel文件 FileOutputStream outputStream = new FileOutputStream("users.xlsx"); workbook.write(outputStream); outputStream.close(); ``` 其中,getUserList() 方法可以返回需要导出的数据表,User 类是一个自定义的实体类,包含了姓名、年龄、性别和地址等属性。在创建数据行时,可以将每个属性的值写入相应的单元格中,然后通过判断相邻两行的数据是否相同来动态合并相同内容单元格。最后,将工作簿输出到文件中即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值