• 轻松合并Excel工作表:Java批量操作优化技巧


    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

    前言

    在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如,学校给老师统计课时,医院给医护人员统计班次等。传统的手工方式需要逐个对比数据,然后将计算结果手动填写到一个新的Excel文件中。但是这种方式不仅费时费力,而且很难确保数据结果的准确性。为了解决这个问题,小编今天要为大家介绍如何使用Java快速实现批量Excel工作表的合并。

    使用Java实现工作表的快速合并

    首先,给大家介绍一下两种复制工作表的可能情况:

    1. 把多个文件的工作表复制到同一个文件中。
      例如有10个Excel文件,每个文件中有一个工作表,最终结果是生成一个新文件,里面有10个工作表。
    2. 把多个文件的工作表内容,截取一部分需要的,复制到同一个工作表中。
      例如有10个Excel文件,每个文件中有一个工作表,只需要该工作表中A1:D24范围内的数据,最终复制到新文件中的一个工作表中。

    下面小编依次为大家介绍两种情况的实现方法(以下图的example.xlsx文件为例子)。

    1.把多个文件的工作表复制到同一个文件中

    首先分别创建两个workbook,然后使用workbook打开example.xlsx,获取 A1:D24的区域,并且分别复制到对应Excel文件中 A1:D24 和 F1:G24 的区域。

    //创建workbook
     Workbook wb = new Workbook();
    
    //使用workbook打开example.xlsx
     wb.open("resources/example.xlsx");
     Workbook newWb = new Workbook();
    
    //获取 A1:D24的区域,并且分别复制到对应Excel文件中 A1:D24 和 F1:G24 的区域。
     wb.getActiveSheet().getRange("A1:D24").copy(newWb.getActiveSheet().getRange("A1:D24"));
     wb.getActiveSheet().getRange("A1:D24").copy(newWb.getActiveSheet().getRange("F1:G24"));
     newWb.save("output/mergedSheet.xlsx");
    

    结果如下:

    2.把多个文件的工作表内容,截取一部分需要的,复制到同一个工作表中

    依然是创建两个workbook,使用workbook打开example.xlsx,模拟两次复制到newWb中。

    这里使用的是copyBefore,意思是复制后,位置在对应目标工作表的前面。

    //创建workbook
     Workbook wb = new Workbook();
     wb.open("resources/example.xlsx");
     Workbook newWb = new Workbook();
    
    //copyBefore:复制后,位置在对应目标工作表的前面。
     wb.getActiveSheet().copyBefore(newWb.getWorksheets().get(0));
     wb.getActiveSheet().copyBefore(newWb.getWorksheets().get(0));
     newWb.save("output/copySheet.xlsx");
    

    结果如下:

    可以看到,在Sheet1前面,添加了两个example工作表。

    总结

    本文上述所用到的Excel库来自葡萄城的产品GcExcel,GcExcel提供的API对于复制工作表来说,非常地方便易用。复制工作表在数据处理的场景中应用得很多。

    除了上面展示的copyBefore,还有copyAfter等其他API。可以参考GcExcel的产品文档了解更多。

    扩展链接:

    如何在前端系统中使用甘特图

    窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器

    探秘移动端BI:发展历程与应用前景解析

  • 相关阅读:
    PTA:字符串加密
    B+树索引的管理
    MVP模式根模块
    如何正确方便的理解双指针?力扣102 (二叉树的层序遍历)
    【数据结构】链表--双链表
    基于 LSTM 的分布式能源发电预测(Matlab代码实现)
    EZView如何与网络视频录像机语音对讲
    华为OD社招Java岗面经,已OFFER
    python 计算最大回撤
    携手华为,微想科技正式启动“720云”鸿蒙原生应用开发
  • 原文地址:https://www.cnblogs.com/powertoolsteam/p/17730769.html