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:好的,不客气哈,祝您生活愉快~
页: 1 2 [3] 4
查看完整版本: [16.2.2]透视表使用问题