找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-6-30 16:54  /   查看:2773  /  回复:0
GcExcel是一款服务端处理Excel的组件。由于其应用在服务端,GcExcel可以做比SpreadJS更多的跨工作簿的操作。本次,我们就来聊一聊GcExcel在跨工作簿复制粘贴上的功能实现。一般来说,常见的复制粘贴有这么几种情况:
1.将A Excel中某个sheet的内容完全替换到B Excel中。
针对这样的需求,GcExcel中可以通过sheet.copy(workbook)这样的接口来实现。在这里sheet指的是A Excel中的某个sheet对象。workbook指的是B Excel中的workbook对象。
这样操作的结果就是会将A Excel中指定的某个sheet,完全复制插入到B Excel中。
这样的需求也会产生一些变种,例如我需要用A Excel的某个sheet 来替换掉 BExcel 中的某个sheet。这个时候就可以在上述的基础上再加入删除B Excel中被替换的Sheet来完成。

2.将A Excel中某个sheet的内容追加扩充到B Excel的某个sheet下面。
这样的需求,通常来自填报汇总的收集上,假设有一张表需要下发到各部门去填报。各部门填报好之后需要建立一个sheet用于汇总,这个sheet就需要收集各部门所有的数据。正常实现该需求时,我们会将填报的模板保存成一个独立的Excel,然后下发到各个部门,每个部门基于同样的模板进行填报。填报好之后新建另一个Excel将所有填报信息收集起来。这个过程中,就需要GcExcel的跨workbook复制功能,进行汇总。
类似学习指南:https://demo.grapecity.com.cn/documents-api-excel-java/demos/cutcopyrangebetweenworkbooks
  1. source_workbook.getActiveSheet().getUsedRange(EnumSet.allOf(UsedRangeType.class)).copy
复制代码
使用这段代码中getUsedRange(EnumSet.allOf(UsedRangeType.class))用于获取表格中被使用的范围,结合上述需求可以理解为获取所有的填报内容。之后通过copy方法,进行拷贝:
  1. <div>source_workbook.getActiveSheet().getUsedRange(EnumSet.allOf(UsedRangeType.class)).copy(workbook.getActiveSheet().getRange("A2"),</div><div>EnumSet.of(PasteType.Formulas, PasteType.Formats, PasteType.RowHeights, PasteType.ColumnWidths));</div>
复制代码


上述代码我么您可以发现copy方法中可以传入一个range,即被copy的位置。这样可以实现精确的控制将内容拷贝到某处。结合上述需求,我们可以每次在拷贝前获取一下汇总模板中的usedRange,通过usedRange判断当前汇总到了第几行,从当前最末行的下一行开始复制。
另外,这里传入PasteType枚举类型还可以选择粘贴的内容,可以按照需求只粘贴某些内容。




0 个回复

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