chess3cake 发表于 2023-12-23 22:38:15

GcExcel进行模板上数时,是否可以保留不存在的key模板

本帖最后由 Ellia.Duan 于 2023-12-28 11:18 编辑

产品:GcExcel
版本:6.2.5
需求编号:DOCXLS-9514

使用GcExcel6.2.5进行模板上数。如果单元格A1中设置模板{{ds1}},但没有进行workbook.addDatasource("ds1",something),执行workbook.processTemplate()后,该单元格A1中的模板会丢失。

有办法在processTemplate()之后,保留ds1的模板吗?

Joestar.Xu 发表于 2023-12-25 11:53:33

您好,我这边测试了一下,如果设置了{{ds1}}在A1单元格后,不设置workbook.addDatasource("ds1",something)的话,在processTemplate()时会报错。



不太明白您为什么要在processTemplate后又要保存模板的信息,您这边是为了实现什么样的需求呢?

chess3cake 发表于 2023-12-26 10:22:07

Joestar.Xu 发表于 2023-12-25 11:53
您好,我这边测试了一下,如果设置了{{ds1}}在A1单元格后,不设置workbook.addDatasource("ds1",something) ...

我有两个区域A,B的模板有关联关系。在业务上需要先上区域A模板的数,然后再上区域B模板的数,因为A模板上数后,会通过公式影响B区域。但是配置模板时是区域A,B的模板是统一配置的。

我还有另外一个帖子和这个需求是相关的,这两个帖子是希望能通过不同维度解决这个问题。
https://gcdn.grapecity.com.cn/showtopic-200600-1-1.html

Joestar.Xu 发表于 2023-12-26 14:16:23

GcExcel原生上不支持这样的需求,但是您可以通过一些业务代码来实现。

比如,现在有一个模板文件A.xlsx,将A读取进来后,创建一个新的WorkBook B,先将区域1的数据从A复制到B中,执行模板填充的代码;然后再将区域2的数据从A复制到B中,再执行模板填充的代码,通过这样的方式来实现。

chess3cake 发表于 2023-12-26 14:28:38

Joestar.Xu 发表于 2023-12-26 14:16
GcExcel原生上不支持这样的需求,但是您可以通过一些业务代码来实现。

比如,现在有一个模板文件A.xlsx ...
有两个问题
1.如何拿到执行模板前对应的区域
2.如何拿到执行模板后对应的区域

JoeJin 发表于 2023-12-26 15:19:23

chess3cake 发表于 2023-12-26 10:22
我有两个区域A,B的模板有关联关系。在业务上需要先上区域A模板的数,然后再上区域B模板的数,因为A模板 ...

您好,当A区域上数之后,公式会影响B区域。
这个场景,您能给一个具体的例子吗?

chess3cake 发表于 2023-12-26 15:51:59

JoeJin 发表于 2023-12-26 15:19
您好,当A区域上数之后,公式会影响B区域。
这个场景,您能给一个具体的例子吗?

示例文件

SheetA中为第一个模板上数区域。MIDDLE为一个聚合数据的Table,会计算A区域中的部门总支出。SheetB区域是第二个要模板上述区域,只填充部门总支出=3的部门。


业务逻辑
1.在SheetA中进行模板上数
2.模板上数后,从MIDDLE中的Table获取所有部门总支出=3的部门
3.将第二步获取的部门上述到SheetB中



JoeJin 发表于 2023-12-26 17:23:23

chess3cake 发表于 2023-12-26 15:51
示例文件

SheetA中为第一个模板上数区域。MIDDLE为一个聚合数据的Table,会计算A区域中的部门总支出。 ...

十分感谢,模板功能更多的是解决动态布局的问题。
看到您的例子中 Middel sheet,主要是用来做数据过滤,这样的话建议直接在代码中过滤,可能效率更高一些。把数据过滤后,再对 B sheet 进行上数即可。

另外也可以考虑拆成两个 Excel 文件分别进行上数操作。

如果还不能解决问题,请分享进一步的信息及原因。

chess3cake 发表于 2023-12-26 17:41:47

本帖最后由 chess3cake 于 2023-12-26 17:43 编辑

JoeJin 发表于 2023-12-26 17:23
十分感谢,模板功能更多的是解决动态布局的问题。
看到您的例子中 Middel sheet,主要是用来做数据过滤 ...
示例中的三个sheet是由用户配置的,在实际业务中,示例中的Middle Sheet可能是N个Middle Sheet和公式来处理的,特别是Middle Sheet中的清洗逻辑是由Excel本身公式+简单脚本语句来做的。

这么做的设计理念是我们希望将用户提供的excel,直接变成我们的数据模板。
也就是说,MiddleSheet的中的逻辑,在理想状态下全部由用户提供,且研发人员不参与。

Asheet 和B sheet 和 Middle Sheet其实都由用户提供,并且用户会在一个excel中处理他们,如果要拆分成多个文件上数,会增加我们的计算链和复杂度。需要我们提供专业人员将用户的文件进行拆分,然后在数据处理后合并成最终文件。

JoeJin 发表于 2023-12-26 17:57:02

chess3cake 发表于 2023-12-26 17:41
示例中的三个sheet是由用户配置的,在实际业务中,示例中的Middle Sheet可能是N个Middle Sheet和公式来处 ...

OK,是否可以将您的场景理解为。您的产品提供了一个服务平台,您提供接口允许用户上传 Excel 模板。把用户上传的 Excel 模板当做一个计算引擎,平台将数据填入,引擎计算出接过来,后续可能是导出,或者做其他用。

还有一个点不太清晰,对于 A sheet 模板上数。您是使用到了 GcExcel 的模板语言吗?
GcExcel 模板语言,提供了扩展单元格,公式计算,上下文关联,分组,分页的功能。
不确定您是否把这些功能(以模板语言的方式)暴露给您的用户,如果未暴露这些功能给您的用户。
那么用户上传的 Excel 模板文件,是否仅需要使用简单的 API setValue 即可以解决问题?
页: [1] 2 3
查看完整版本: GcExcel进行模板上数时,是否可以保留不存在的key模板