找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9908

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15552

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

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

0 个回复

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