当前位置: 首页 > news >正文

音乐分享网站开发合肥网站建设新浪营销

音乐分享网站开发,合肥网站建设新浪营销,wordpress摘要设置,如何用模板建网站EasyExcel是一款处理excel的工具类,主要特点如下(官方): 特点 高性能读写:FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据。相比一些传统的 Excel 处理库,它能显著降低内存占用。…

EasyExcel是一款处理excel的工具类,主要特点如下(官方):

特点

  • 高性能读写:FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据。相比一些传统的 Excel 处理库,它能显著降低内存占用。
  • 简单易用:该库提供了简洁直观的 API,使得开发者可以轻松集成到项目中,无论是简单的 Excel 操作还是复杂的数据处理都能快速上手。
  • 流式操作:FastExcel 支持流式读取,将一次性加载大量数据的问题降到最低。这种设计方式在处理数十万甚至上百万行的数据时尤为重要。

我自己实践之后的感受如下:

  • 性能比较好,底层使用SXSSF,在大数据的情况下,会先往硬盘中插入,加快速度。(SXSSF 通过将数据写入磁盘而不是全部保留在内存中,来减少内存的使用。这种 “流式” 写入方式特别适合处理那些可能导致传统内存处理方式崩溃的大型 CSV 文件。SXSSF 可以在写入数据的同时,将数据保存在一个临时的文件中,这样即使处理非常大的数据集,内存的使用也会保持在可控范围内。)
  • 支持注解,可以在每个字段属性上添加注解,可以设置表格的表头/颜色/字体/合并单元格等属性。
  • 支持策略,针对复杂的表格,支持注入策略,针对表格进行各种加工。
  • 支持excel转pdf(仅支持xlsx,版本为1.0.0)

实践

引入依赖


<dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version>1.1.0</version>
</dependency>
1.表头支持注解方式生成

比如,下方的示例:创建一个绿色背景,加边框的表头
在这里插入图片描述
代码的话可以直接这样写:
新增一个订单类:

@Data
// 表头背景设置
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 17)
public class Order {@ExcelProperty("订单号")private String orderId;@ExcelProperty("渠道")private String searchChannel;@ExcelProperty("创建时间")private String createTime;@ExcelProperty("乘客姓名")private String name;@ExcelProperty("证件号")private String idCard;
}

创建表格


/*** 合并单元格* <p>* 1. 创建excel对应的实体对象 参照{@link DemoData} {@link DemoMergeData}* <p>* 2. 创建一个merge策略 并注册* <p>* 3. 直接写即可** @since 2.2.0-beta1*/
@Test
public void mergeOrderWrite() {//使用策略合并单元格try (FileOutputStream excel = new FileOutputStream("mergeOrderWrite.xlsx");BufferedOutputStream bos = new BufferedOutputStream(excel)) {// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭EasyExcel.write(bos, Order.class).sheet("模板").doWrite(buildData());System.out.println("导出完成");} catch (IOException e) {System.out.println("导出失败:" + e.getMessage());} catch (Exception e) {throw new RuntimeException(e);}
}//初始化数据
private List<Order> buildData() {List<Order> list = new ArrayList<>();for (int i = 0; i < 100; i++) {for (int j = 0; j < 2; j++) {Order user = new Order();user.setOrderId("orderId_" + i);user.setSearchChannel("searchChannel_" + i);user.setCreateTime(DateTimeUtil.nowString());user.setName("name_" + j);user.setIdCard("idCard_" + j);list.add(user);}}Order user1 = new Order();user1.setOrderId("orderId_99");user1.setSearchChannel("searchChannel_99");user1.setCreateTime(DateTimeUtil.nowString());user1.setName("name_a");user1.setIdCard("idCard_a");list.add(user1);return list;
}

上面代码执行之后,即可以生成效果图中的表格数据

2.通过添加策略,来支持复杂的表格处理

比如我们要处理一个表格,里面的数据涉及到动态合并单元格。需要将相邻的相同订单号合并到一起
在这里插入图片描述
支持添加策略实现:
思路:遍历每个row,如果两个orderid一样,则合并

@Slf4j
public class LoopOrderMergeStrategy implements RowWriteHandler {/*** 订单号*/private String orderId;/*** 当前订单号起始坐标*/private Integer indexStart;/*** 合并策略,订单号和创建时间合并** @author zhouxy* @date 2025/4/3 17:27*/public void afterRowDispose(RowWriteHandlerContext context) {log.info("进来,,,{},{}", context.getRow().getRowNum(), context.getRelativeRowIndex());//遍历每个row,如果两个orderid一样,则合并//这里是获取每一行数据Cell cell = context.getRow().getCell(0);String currentOrderId = cell.getStringCellValue();if (Strings.isEmpty(this.orderId)) {this.orderId = currentOrderId;indexStart = context.getRowIndex();} else if (Objects.equals(this.orderId, currentOrderId)) {//合并单元格//订单号CellRangeAddress orderCellRangeAddress = new CellRangeAddress(indexStart,context.getRowIndex(),cell.getColumnIndex(),cell.getColumnIndex());context.getWriteSheetHolder().getSheet().addMergedRegionUnsafe(orderCellRangeAddress);//渠道Cell searchChannelCell = context.getRow().getCell(1);CellRangeAddress searchChannelCellRangeAddress = new CellRangeAddress(indexStart,context.getRowIndex(),searchChannelCell.getColumnIndex(),searchChannelCell.getColumnIndex());context.getWriteSheetHolder().getSheet().addMergedRegionUnsafe(searchChannelCellRangeAddress);//创建时间Cell createtimeCell = context.getRow().getCell(2);CellRangeAddress createTimeCellRangeAddress = new CellRangeAddress(indexStart,context.getRowIndex(),createtimeCell.getColumnIndex(),createtimeCell.getColumnIndex());context.getWriteSheetHolder().getSheet().addMergedRegionUnsafe(createTimeCellRangeAddress);} else if (!Objects.equals(this.orderId, currentOrderId)) {this.orderId = currentOrderId;indexStart = context.getRowIndex();}}}

生成表格的时候,将该策略设置进去


/*** 合并单元格* <p>* 1. 创建excel对应的实体对象 参照{@link DemoData} {@link DemoMergeData}* <p>* 2. 创建一个merge策略 并注册* <p>* 3. 直接写即可** @since 2.2.0-beta1*/
@Test
public void mergeOrderWrite() {//使用策略合并单元格try (FileOutputStream excel = new FileOutputStream("mergeOrderWrite.xlsx");BufferedOutputStream bos = new BufferedOutputStream(excel)) {LoopOrderMergeStrategy loopMergeStrategy = new LoopOrderMergeStrategy();// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭EasyExcel.write(bos, Order.class).registerWriteHandler(loopMergeStrategy).sheet("模板").doWrite(buildData());System.out.println("导出完成");} catch (IOException e) {System.out.println("导出失败:" + e.getMessage());} catch (Exception e) {throw new RuntimeException(e);}
}
3.支持excel转pdf,但是只有1.0.0版本有,新版本去掉了。
   @Testpublic void excelToPdf() {FastExcel.convertToPdf(new File("excel1.xlsx"),new File("pdfFile"),null,null);}
4.性能

相同数据生成用时比较:ExsyExcel > SXSSF > HSSF. 但是HSSF最大行数为65565行,再大就超出范围报错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
HSSF可写入行数
在这里插入图片描述
easyexcel和SXSSF可写入行数
在这里插入图片描述

综合比较用时的话,,EasyExcel和SX SSF的用时差不多,HSSF的用时相当于前两者的三分之一。但是HSSF数据量支持较小,但是综合下来的话,从用时,代码简洁度来说,建议使用EasyExcel

其他功能可以看官方的github,里面有很多示例。比如支持转图片,根据模板写入excel等。

http://www.dtcms.com/a/503966.html

相关文章:

  • 安卓从网站获取视频怎么做个人营销网站
  • 3.3循环语句
  • 静默安装金仓数据库,到底有多简单?
  • 个人网站设计分类北京优酷首页培训机构
  • 中山网站建设的价格茂名建站价格
  • 定远建设局官方网站怎么制作自己的个人网站
  • 南宁响应式网站制作中企动力做网站 知乎
  • 制作公司网站有哪些好处微信公众号怎么二次开发
  • 保持电脑不息屏-skill
  • 配置openguass 教程(自存)
  • 3.4循环控制
  • 上海发乐门网站建设公司鞍山招聘网最新招聘
  • FastAPI之 Python的类型提示
  • 注意力机制(Attention)介绍和示例
  • 做网站要实名吗呼和浩特网站运营公司
  • 做网站二维码怎样自己做网络推广网站
  • 望牛墩做网站中国空间站对接成功
  • 6.3 文件传输协议 (答案见原书 P277)
  • BLDC电机矢量控制(FOC)深度解析:从理论到实践
  • MySQL中常见的锁
  • 浙江杭州seo网站建设网站优化在微信上做网站
  • 招商网站平网站平台地方购物网站盈利模式
  • 网站建设培训心得南京紫米网络科技有限公司
  • 【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
  • 怎么做酒店网站网页设计教程ppt
  • 深圳宝安美容医院网站建设想学网站建设优化去哪
  • 分布式组件【ZooKeeper】
  • 基于windows 11 的python编译开发环境部署
  • 建设银行江苏分行网站最新消息今天的新闻
  • STM32G474单片机开发入门(十七)DAC详解及输出电压和正弦波实战