一直以来,工作表合并操作是多级填报以及生成报表的常见需求。我们经常要做的就是将填报信息收集汇总到一起。这样的需求,我推荐的方式是用GcExcel在服务器端实现。因为,首先从需求上分析,合并信息的多少是不确定的,并且合并本身是不需要让用户有感知的,所以放到服务端静默去完成是最合适的方式。
GcExcel可以通过range的copy方法快速来完成,并且可以做到跨工作簿(workbook)的合并。
- public static void main(String[] args) {
- Workbook workbook = new Workbook();
- workbook.open(SpanCell.class.getClassLoader().getResourceAsStream("spanTest.xlsx"));
- Workbook spanWorkbook = new Workbook();
- IWorksheet spanWorksheet = spanWorkbook.getActiveSheet();
- for(int i=0; i<workbook.getWorksheets().getCount(); i++) {
- IWorksheet worksheet = workbook.getWorksheets().get(i);
- IRange spanWorksheet_usedRange = spanWorksheet.getUsedRange(EnumSet.allOf(UsedRangeType.class));
- if(spanWorksheet_usedRange==null) {
- worksheet.getUsedRange(EnumSet.allOf(UsedRangeType.class)).copy(spanWorksheet.getRange("A1"));
- }else {
- worksheet.getUsedRange(EnumSet.allOf(UsedRangeType.class)).copy(spanWorksheet.getRange(spanWorksheet_usedRange.getLastRow()+1,0));
- }
- }
- spanWorkbook.save("exportSpanResult.xlsx");
- }
复制代码 如上面代码所示。大意是打开了两个工作簿,workbook和spanWorkbook,workbook对象中存在着多个worksheet。目的就是要将这些worksheet合并在spanWorkbook下的一个worksheet中。采用循环获取UsedRange,将其copy到新的worksheet中,每次copy完毕后重新获取一下spanWokrbook中目标sheet的UsedRange,然后下次copy的rowindex就是UserRange的lastRow+1。
|
|