首页 > 其他分享 >在表格开发中,如何选择适合自己的处理工具?

在表格开发中,如何选择适合自己的处理工具?

时间:2023-11-15 14:04:52浏览次数:22  
标签:demoDAO 场景 表格 适合 EasyExcel Excel GcExcel cachedDataList 工具

引言

GcExcel和EasyExcel都是卓越的高性能Excel处理库。GcExcel是由葡萄城公司开发,可用于Java和.Net平台;而EasyExcel是阿里巴巴开发的基于Java的开源Excel处理库。 在本文中,我们将对GcExcel和EasyExcel进行比较,帮助读者在实际场景中做出明智选择。

EasyExcel与GcExcel的区别

每个产品背后都有其设计初衷,EasyExcel的主要目标是解决POI在读写Excel文件时遇到的一些问题,例如内存占用过大、经常出现OOM(内存溢出)错误以及性能不够优越,无法轻松处理大型文件的限制。因此,EasyExcel旨在提供更高效、更稳定的Excel读写解决方案,以满足处理大文件时的需求。

在表格开发中,如何选择适合自己的处理工具?_API

与EasyExcel不同,GcExcel的API设计初衷独具特色。EasyExcel注重于快速、简便地读写Excel文件,而GcExcel则更加专注于提升读写性能、公式计算性能以及高级Excel功能的支持,如图表、透视表、数据校验、条件格式等等。

GcExcel在超越Excel功能的基础上,积极投入于提升性能,并为开发人员提供丰富多样的高级Excel功能。无论是数据分析、报表制作还是复杂公式运算,GcExcel都以出色的性能和功能展现了其独特的价值。

在表格开发中,如何选择适合自己的处理工具?_API_02

EasyExcel与GcExcel的应用场景

由于解决问题的差异,这两个组件库都具备极高的性能,但它们将性能优势应用于不同的场景中。

对于EasyExcel而言,Excel更像是数据的承载方式。当用户需要处理高并发量且对内存要求较高时,EasyExcel展现出更适合的性能表现。

然而,Excel经过微软多年的发展,衍生出许多不同的应用场景,如公式计算、数据填报、打印报送等。在这些场景中,通常需要组件库能够覆盖足够多的Excel功能。因此,在这些情况下,GcExcel更为适用。

例如,基金、保险、财税等行业通常需要进行Excel公式计算。通过使用GcExcel,可以实现服务端自动化公式计算的解决方案。

另外,对于计量检测、实验室管理等领域,对导出功能需求较高。通过GcExcel可以实现自动化导出PDF以及定时报送等功能。

同时,葡萄城还提供了纯前端Excel组件库产品SpreadJS。如果场景需要前后端协作进行Excel处理,选择GcExcel显然更加合适。

总之,根据不同的需求场景,选择合适的组件库能够充分发挥其性能优势,提供更好的Excel处理解决方案。

EasyExcel与GcExcel的API设计风格

EasyExcel的API采用流式读写和事件驱动的方式,这种设计理念使得在操作Excel时,性能和内存之间的平衡可达到极致。同时,其标注式的设计理念将代码逻辑与Excel文件解耦,使开发人员只需要更好地思考模型的设计,而不必担心繁琐的Excel操作。综上所述,EasyExcel的API提供了高性能、高效率的Excel操作解决方案,让您能够更加专注于业务逻辑的实现。

// 摘自EasyExcel官方文档

 // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
 @Slf4j
 public class DemoDataListener implements ReadListener<DemoData> {

   /**
   * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
   */
   private static final int BATCH_COUNT = 100;
   /**
   * 缓存的数据
   */
   private List<DemoData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
   /**
   * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
   */
   private DemoDAO demoDAO;

   public DemoDataListener() {
     // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
     demoDAO = new DemoDAO();
   }

   /**
   * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
   *
   * @param demoDAO
   */
   public DemoDataListener(DemoDAO demoDAO) {
     this.demoDAO = demoDAO;
   }

   /**
   \* 这个每一条数据解析都会来调用
   *
   * @param data  one row value. Is is same as {@link AnalysisContext#readRowHolder()}
   * @param context
   */
   @Override
   public void invoke(DemoData data, AnalysisContext context) {
     log.info("解析到一条数据:{}", JSON.toJSONString(data));
     cachedDataList.add(data);
     // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
     if (cachedDataList.size() >= BATCH_COUNT) {
       saveData();
       // 存储完成清理 list
       cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
     }
   }

   /**
   * 所有数据解析完成了 都会被调用
   *
   * @param context
   */
   @Override
   public void doAfterAllAnalysed(AnalysisContext context) {
     // 这里也要保存数据,确保最后遗留的数据也存储到数据库
     saveData();
     log.info("所有数据解析完成!");
   }

   /**
   * 加上存储数据库
   */
   private void saveData() {
     log.info("{}条数据,开始存储数据库!", cachedDataList.size());
     demoDAO.save(cachedDataList);
     log.info("存储数据库成功!");
   }
 }

GcExcel的API则以Excel为蓝本,采用工作簿(workbook)、工作表(worksheet)和区域(range)等概念,使整个组件库能够完美支持Excel的各种功能。如果您对Excel非常熟悉,那么使用GcExcel时会感到非常亲切和自然。

这两种设计方式就像解决不同场景的两个产品一样,它们都适合不同风格的开发人员。

对于那些追求极致技术的开发人员来说,EasyExcel的灵活性非常合适。而对于那些更注重快速解决业务需求、务实的开发人员来说,GcExcel提供了多样化的API选择,并且与Excel高度兼容,能够高效赋能于这种场景。

Workbook wb = new Workbook();
 IWorksheet sheet1 = wb.getWorksheets().get(0);
 Object[][] values = (Object[][]) sheet1.getRange("A1:Z26").getValue();

最后

通过上述的对比,EasyExcel和GcExcel分别适用于不同的情况。

在选择时,您可以根据不同的维度思考,选择更适合自身场景的Excel处理库。



作者:葡萄城技术开发团队




标签:demoDAO,场景,表格,适合,EasyExcel,Excel,GcExcel,cachedDataList,工具
From: https://blog.51cto.com/powertoolsteam/8390052

相关文章

  • Nginx 可视化管理工具 nginx-proxy-manager
    nginx-proxy-manager是一个反向代理管理系统,它基于NGINX,具有漂亮干净的WebUI。还可以获得受信任的SSL证书,并通过单独的配置、自定义和入侵保护来管理多个代理。它是开源的,斩获11.8K的Star数。特征基于Tabler(https://tabler.github.io/)的美观安全的管理界面无需了解N......
  • 开源免费多平台文件同步工具Syncthing
    一、Syncthing介绍Syncthing是一个连续的文件同步程序。它可以在两台或更多的计算机之间同步文件。总结了如下几个特点:中文友好(支持中文界面)设置简单,易上手支持Linux、Windows、macOS(NAS也可以方便部署)同步效率不错支持版本控制(可以恢复到指定的版本)Docker部署方便支持同步加密,保护......
  • C# 开发浏览器拓展工具
    1、安装Blazor.BrowserExtension.Template模板dotnetnew--installBlazor.BrowserExtension.Template2、新建项目dotnetnewbrowserext--name 你的项目名称   3、修改代码 4、运行程序 5、测试页面\index.html 6、edge开启开发者模式 输入chrome:......
  • res aws 开源的研究以及工程工作室工具
    res是由was开源以及支持的方便研究以及工程化的一个web门户工具,可以方便在aws上运行测试以及服务,而不需要专业的技术说明目前来说对于使用aws的用户是一个很不错的参考,服务部署上利用了awsCloudFormation,但是也是一个很不错的值得学习的项目参考资料https://github.com/a......
  • Vue3+Element plus 实现表格可编辑
    <template><div><el-buttontype="primary"@click="handleAdd">新增</el-button></div><div><el-table:data="tableData"style="width:100%&quo......
  • 抖音评论区提取用户工具,可采集抖音号UID评论内容时间,易语言开源版
    ​软件调用的接口,不需要浏览器啥的,只需要输入视频连接就行了,然后它就会自动读取视频下面的评论信息,通过POst协议,所以说不管有多少条都能提取出来,不会卡主软件,很多都用的填表模式开发的,那种采集几千条就卡死用不了。软件界面图:  采集出来的效果图:  易语言源码:=======......
  • 标准中文电码查询工具
    标准中文电码(码表)是汉字在计算机中的编码方式,简称“五笔”,是中国国家标准化委员会推出的国家标准。它被广泛应用于各种场合,尤其是在计算机输入法中。然而,由于五笔码表的数量庞大,很难记忆每个汉字的码表,因此需要一个方便快捷的工具进行查询。本文将介绍一种标准中文电码查询工具。工......
  • sagemode 社交媒体平台用户名OSINT工具
    sagemode简介SagemodeJutsu是一款简单高效的开源情报(OSINT)工具,其创建时考虑到了简单性。它允许用户在各种在线平台上搜索特定用户名,帮助数字调查人员和网络安全爱好者进行研究。安装克隆存储库gitclonehttps://github.com/senran101604/sagemode将目录更改为sagemod......
  • HackerGPT 黑客技术、工具和策略的广泛数据库AI
    黑客GPTHackerGPT是您在黑客世界中黑客的数字伙伴。这款人工智能助手在设计时考虑到了黑客黑客的独特需求,黑客知识和帮助的最前沿。HackerGPT配备了包含黑客技术、工具和策略的广泛的数据库,它不仅仅是一个信息资源,它还是您黑客之旅的积极参与者。无论您是想要学习技巧的初学者,......
  • 标准中文电码查询工具
    工具在线地址:https://amd794.com/chinesecode标准中文电码(码表)是汉字在计算机中的编码方式,简称“五笔”,是中国国家标准化委员会推出的国家标准。它被广泛应用于各种场合,尤其是在计算机输入法中。然而,由于五笔码表的数量庞大,很难记忆每个汉字的码表,因此需要一个方便快捷的工具进行......