Yu-Xian
发表于 2023-12-20 08:45:43
Joestar.Xu 发表于 2023-12-19 11:52
您好,不太明确您具体是怎么复制粘贴的,我这边尝试使用Ctrl+C和Ctrl+V来复制粘贴,效果如下:
顾问您好:
说明一下我们的操作情境
(1)我们的上传模板包含两个部分,
一个折页是来源折页
另一个折页是根据数据来源产生的透视表,或者用户自行根据需求编制公式从数据源折页取数计算
(2)数据来源,我们是提供用户上传线下excel后,将整个档案储存到后端资料库。
也就是前面提供的来源档.xlsx档案
(3)用户操作时系统会先读取模板
(4)并根据用户输入的条件至后端找出符合的数据来源档案(来源档.xlsx)
也就是下面传入的blob
(5)接着开启数据来源档,根据工作表名称取得工作表内容,转换成JSON
(6)找到原本模板中属于数局来源的折页,也就是〔产耗明细〕
将此折页用步骤5转换的JSON替换
(7)这时原本spreadJS上〔产耗明细〕工作表内容已经被提换成来源档xlsx的Sheet1内容
-->我之前说的未自动扩展,就是这边显示的,当内容用fromJSON写入后,
表格未扩展,还是维持原本的列数
-->这边不是让用户在画面上进行复制贴上的操作,而是读取档案自动提换工作表内容
以上是针对我们操作情境的说明,以及遇到的问题,再麻烦顾问看看我们是否需要做什么调整。
谢谢
Joestar.Xu
发表于 2023-12-20 10:27:52
您好,您的使用场景我这边已经了解了,我看了您提供的代码,以及结合我之前的复现情况,需要您提供一个完整的可以复现您问题的Demo,我们这边根据Demo调研后根据实际情况才能给您详细的解决方案。
Yu-Xian
发表于 2023-12-20 11:00:05
Joestar.Xu 发表于 2023-12-20 10:27
您好,您的使用场景我这边已经了解了,我看了您提供的代码,以及结合我之前的复现情况,需要您提供一个完整 ...
顾问您好:
提供demo资料如附档。
1.操作影片
2.来源档
3.模板
再麻烦看看是否需要提供什么资料
谢谢
Joestar.Xu
发表于 2023-12-20 11:10:50
您好,另外还需要您提供完整的代码,因为根据您之前提供的代码我无法复现出您的问题,所以需要您提供完整的代码,复现后以进一步调研。
Yu-Xian
发表于 2023-12-20 11:24:55
Joestar.Xu 发表于 2023-12-20 11:10
您好,另外还需要您提供完整的代码,因为根据您之前提供的代码我无法复现出您的问题,所以需要您提供完整的 ...
顾问您好:
提供程式如附档 zafjBR120.jsp
其中载入数据源的程式是2352行
copySheetToSpread(blob,sheetNameA,useSheet)
看看这样提供的是否足够
谢谢
Joestar.Xu
发表于 2023-12-20 14:40:03
您好,我查看了您提供的信息,目前如果要实现您的需求,可以直接根据最多行数去resize的,实现方法为:先使用getUsedRange接口获取数据范围,然后使用resize接口去修改table的范围即可。
参考链接:https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Worksheet#getusedrange
https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Tables.TableManager#resize
这个方法在之前提过,您可以参考一下,具体的代码可以写在copySheetToSpread这个方法的后面。
Yu-Xian
发表于 2023-12-21 11:17:02
Joestar.Xu 发表于 2023-12-20 14:40
您好,我查看了您提供的信息,目前如果要实现您的需求,可以直接根据最多行数去resize的,实现方法为:先使 ...
顾问您好:
应急方案就根据您的建议暂时采用table resize的作法。
进行工作表复制时,
1. 找出该工作表所有表格
2. 取得各表格的起讫行列数
3. 逐列判断是否有值,没有值表示表格已到最后一列
4. 执行 sheet.tables.resize
修改后程式 麻烦顾问看看这样作法是否可行?效能方面会不会有太大影响(因为每列依序判断值是否存在)
另外,若custom name的问题若后续修订完成,再烦请告知。
谢谢
Joestar.Xu
发表于 2023-12-21 13:55:35
您好,我看了您修改后的代码,您是使用了循环来判断数据的范围,这样在数据量较小的时候可能不会有性能问题,但是一旦数据量较大时会出现性能上的浪费。
推荐您使用getUsedRange接口来获取sheet上所有数据的范围,效果如下图:
通过这个接口去获取数据范围能获得比循环更好的性能表现。
custom name的问题后续有进展的话,我会在本帖中回复您。
Yu-Xian
发表于 2023-12-21 16:21:56
Joestar.Xu 发表于 2023-12-21 13:55
您好,我看了您修改后的代码,您是使用了循环来判断数据的范围,这样在数据量较小的时候可能不会有性能问题 ...
您好:
会采用循环的方式主要是因为无法确定用户模板设计,
是否同一个工作表上会使用多个表格。
所以我是针对每个表格进行各自列数的判断。
这边我们看是否透过教育训练方式,请用户每个工作表配置一个表格即可
就可以采用getUsedRange方式。
目前透视表我就先这样处理,谢谢顾问这几天的协助。
custom name的问题就等后续回复。
谢谢
Joestar.Xu
发表于 2023-12-21 16:45:47
:mj72:好的,不客气哈,祝您生活愉快~