找回密码
 立即注册

QQ登录

只需一步,快速开始

chess3cake
注册会员   /  发表于:2023-12-26 18:08:41
11#
JoeJin 发表于 2023-12-26 17:57
OK,是否可以将您的场景理解为。您的产品提供了一个服务平台,您提供接口允许用户上传 Excel 模板。把用 ...

是的,我们会教给用户简单的gc模板语法,如果用户目标结果太过复杂才会由我们介入
回复 使用道具 举报
chess3cake
注册会员   /  发表于:2023-12-26 18:47:23
12#
chess3cake 发表于 2023-12-26 18:08
是的,我们会教给用户简单的gc模板语法,如果用户目标结果太过复杂才会由我们介入

而且还面临公式扩展的问题,所以模板上数肯定是第一选择
回复 使用道具 举报
JoeJin
超级版主   /  发表于:2023-12-27 09:25:27
13#
chess3cake 发表于 2023-12-26 18:08
是的,我们会教给用户简单的gc模板语法,如果用户目标结果太过复杂才会由我们介入

好的,理解。那 middle 计算出来的结果,是如何填到 B 页面的呢?

目前来看,流程如下:
A 页面模板上数 -> Middle 页面计算,过滤 -> ? -> B 页面。

主要还是想了解一下 B 页面,为什么也需要模板上数。数据目前是 Middle 产生的,从您提供的例子来看,通过Excel的数组公式,似乎是可以满足需求的。
回复 使用道具 举报
chess3cake
注册会员   /  发表于:2023-12-27 10:00:49
14#
JoeJin 发表于 2023-12-27 09:25
好的,理解。那 middle 计算出来的结果,是如何填到 B 页面的呢?

目前来看,流程如下:

有一部分复杂公式,比如各种if,lookup,在数据量较大情况下执行较慢。我们会把它转变成一段对应的脚本,比如说sql或者groovy,然后用代码清洗,再拿到数后对B进行上数。也就是middle页和b页可能并不完全由公式关联。但是b页这种目标sheet往往会有公式/样式扩展的需求,很难直接在脚本中对b页直接上数。
回复 使用道具 举报
JoeJin
超级版主   /  发表于:2023-12-27 11:25:01
15#
chess3cake 发表于 2023-12-27 10:00
有一部分复杂公式,比如各种if,lookup,在数据量较大情况下执行较慢。我们会把它转变成一段对应的脚本, ...

好的,感谢您详细的需求描述。
需求已经收录,我们将在后续的版本中研究并考虑实现。
如果有任何进展,我们将会与您分享。

现在没有太好的 workaround 方法,如果您能够区分 B 页面的话,可以现将B页面从模板页摘出来,等A页面上数及middle页面完成后,将B页面复制回来,再一次执行模板上数。
移动工作表,可以参考: https://demo.grapecity.com.cn/do ... eetbetweenworkbooks
回复 使用道具 举报
chess3cake
注册会员   /  发表于:2023-12-27 11:33:09
16#
JoeJin 发表于 2023-12-27 11:25
好的,感谢您详细的需求描述。
需求已经收录,我们将在后续的版本中研究并考虑实现。
如果有任何进展, ...

实际场景会更复杂,b表可能是其他结果表的中间表,b表的公式扩展会有连带反应,所以这种做法必须要获取到从b开始的所有有公式关联的表,但如果b的关联表中使用模板公式,那么就无法直接识别。
由此引申出来的问题是,
我能够根据模板语法来筛选range吗?就像已经提供的根据样式等筛选range的功能一样。如果可以,那我就能直接区分出模板sheet。
回复 使用道具 举报
JoeJin
超级版主   /  发表于:2023-12-27 17:40:35
17#
chess3cake 发表于 2023-12-27 11:33
实际场景会更复杂,b表可能是其他结果表的中间表,b表的公式扩展会有连带反应,所以这种做法必须要获取到 ...

可以试试使用“搜索”功能找到包含数据源的单元格。
https://www.grapecity.com.cn/dev ... /FindandReplaceData

根据数据源的字段来查找可能的单元格,再根据查找出来的结果,判断如果有 {{}} 就是模板语言的单元格。
在第一次上数之前,先把B页面可能用到的数据源都替换掉。
在第二次上数的时候,再替换回来。
回复 使用道具 举报
chess3cake
注册会员   /  发表于:2023-12-27 17:50:27
18#
JoeJin 发表于 2023-12-27 17:40
可以试试使用“搜索”功能找到包含数据源的单元格。
https://www.grapecity.com.cn/developer/grapecity ...

可以尝试,感觉路子是ok的
回复 使用道具 举报
chess3cake
注册会员   /  发表于:2023-12-27 20:10:42
19#
本帖最后由 chess3cake 于 2023-12-27 20:14 编辑
JoeJin 发表于 2023-12-27 17:40
可以试试使用“搜索”功能找到包含数据源的单元格。
https://www.grapecity.com.cn/developer/grapecity ...

我使用以下代码循环查询是能够达到检索到所有可能单元格的目的。
  1. IRange usedRange = workbook.getWorksheets().get(0).getUsedRange();
  2.         FindOptions findOptions = new FindOptions();
  3.         findOptions.setLookIn(FindLookIn.Values);
  4.         findOptions.setLookAt(LookAt.Part);
  5.         IRange candidateTemplateCell = usedRange.find("{{", findOptions);
  6.         while (candidateTemplateCell != null) {
  7.             System.out.println(candidateTemplateCell.getValue());
  8.             candidateTemplateCell = usedRange.find("{{", candidateTemplateCell, findOptions);
  9.         }
复制代码


但是经过我的测试,find并不能支持正则表达式,如果我将上述代码中的find字符串从"{{"替换成"\\{\\{(.)+\\}\\}",该代码无法搜索到预期单元格。

有使用正则表达式进行搜索的案例分享一下吗,或者我有办法自定义匹配逻辑吗?

使用find这个api,和我自己遍历range拿到所有单元格进行评估,这两个方案之间有什么显著差异吗?
回复 使用道具 举报
JoeJin
超级版主   /  发表于:2023-12-28 11:28:14
20#
chess3cake 发表于 2023-12-27 20:10
我使用以下代码循环查询是能够达到检索到所有可能单元格的目的。

https://demo.grapecity.com.cn/do ... ialcellsfindanytext

您可以参考这个例子,使用正则表达式搜索,这个就是自己遍历了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部