找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-18 12:09  /   查看:2412  /  回复:0
我们在日常的业务需求中,往往会遇到需要做数据汇总的情况,需要将多个文件中的数据汇总到一起。假设这些数据存放上有一定的规律,例如都是从第几行起始或者从某一个关键字之后开始等。人工在做这样的合并操作时,大多会用不断的复制粘贴。如果文件很多的话,这样机械性的重复工作是非常没有意义的事情,而且人工的话容易出错。对于这样的问题处理办法最好是通过程序来自动完成。
那么如何通过程序来完成这样的功能呢,这里就可以用到GcExcel 5.0新特性中的数据导入功能了。该功能可以从指定的Excel文件中提取指定区域的数据。我们提取到数据之后就可以通过GcExcel将数据汇总到一起。从而完成上述汇总的需求了。
具体来说,GcExcel提供了importData这个方法用来从指定文件中提取数据,该方法被重载了多次,用于适应不同的情况:
importData(String fileName,String worksheetName )
importData(String fileName,String worksheetName,int row,int column,int rowCount,int columnCount)
importData(InputStream fileStream,String worksheetName)
importData(InputStream fileStream,String worksheetName,int row,int column,int rowCount,int columnCount)

对于里面的参数我们可以大致做如下的归类:
fileName/fileStream:文件名称或文件流
worksheetName:工作表名称
row:区域的行索引
column:区域的列索引
rowCount:区域的行数
columnCount:区域的列数

简单来说我们可以通过指定文件名称,工作表名称,数据区域来获取指定的数据,获取到的数据是一个二维数组。之后我们通过GcExcel setValue方法将数据填充到汇总表的指定位置上,例如下面代码所示:
  1. Workbook workbook = new Workbook();
  2. InputStream fileStream = this.getResourceStream("xlsx\\AgingReport.xlsx");
  3. // Import data of a range from the fileStream
  4. Object[][] data = Workbook.importData(fileStream, "Aging Report", 8, 2, 21, 7);
  5. // Assign the data to current workbook
  6. workbook.getWorksheets().get(0).getRange(0, 0, 21, 7).setValue(data);
复制代码
注意:
上述事例中importData是在类上进行调用(Workbook)而非实例(workbook),原因是importData只是需要读取某个文件的数据,并不需要创建对象在对象实例上去写入,直接在Workbook上调用节省了初始化workbook实例的内存消耗和时间,节约了性能。

对于上述的功能熟悉GcExcel的小伙伴可能要说,之前的版本中提供了copyto的方法,用那个方法也能完成同样的需求。
是的没错,copyto也可以完成同样的需求,但是用importData的好处有以下几点:
1.copyto需要读取整个Excel文件后,在读取的实例上进行操作、然而importData不需要,减少了读取整个Excel文件的时间和存储读取内容的空间,节约了性能。
2.从代码上来看,copyto实现堆砌的代码数量更多。对于copy的内容也要通过设置进行区分,略嫌麻烦。
image.png950904846.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部