请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

.fly

注册会员

1

主题

4

帖子

17

积分

注册会员

积分
17
  • 59

    金币

  • 1

    主题

  • 4

    帖子

最新发帖
.fly
注册会员   /  发表于:2025-1-17 20:00  /   查看:78  /  回复:7
1金币
如题。我需要调转行的顺序,并保持公式引用关系不变。
譬如,我将row 1 调换到row 2,则引用单元格A1的公式自动改为A2。
如果没有直接直接实现,备选方案是代码触发剪切。有办法吗?

最佳答案

查看完整内容

通过您的描述,不太能想象您的具体场景,需要您详细介绍下。 以怎样的方式重排行?比如在数据源层根据某个属性按照升序或者降序排序?这样的话,可以使用排序功能Worksheet:sortRange()。在排序某列时,实际上可以同时带动引用了其的单元格,如下图所示: 也可以调整排序区域,将所有包含数据的列都列入排序区域。 如果您的数据量较多,那么排序过程中的标脏处理可能会带来一定程度的性能影响,为了保持性能流畅,可 ...

7 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2025-1-17 20:00:21
来自 6#
.fly 发表于 2025-1-20 13:43
谢谢!我需要编程触发此事件,而不是监听。我的需求是对大量的,譬如1000行的单元格进行乱序重排,每行单 ...

通过您的描述,不太能想象您的具体场景,需要您详细介绍下。

以怎样的方式重排行?比如在数据源层根据某个属性按照升序或者降序排序?这样的话,可以使用排序功能Worksheet:sortRange()。在排序某列时,实际上可以同时带动引用了其的单元格,如下图所示:
排序同步修改公式引用.gif

也可以调整排序区域,将所有包含数据的列都列入排序区域。

如果您的数据量较多,那么排序过程中的标脏处理可能会带来一定程度的性能影响,为了保持性能流畅,可以在排序过程中暂停标脏,待结束后再恢复标脏。

可以参考官网文档了解详情:
Worksheet:sortRange()--https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Worksheet#sortrange
脏数据的挂起与恢复机制--https://demo.grapecity.com.cn/spreadjs/help/docs/BestPractices/UsingsuspendDirtyandresumeDirty
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-1-20 08:51:01
2#
您好!可以通过ClipboaradPastingClipboardPasted事件监听粘贴,ClipboardChangingClipboardChanged事件监听复制或剪切,事件监听到的参数中的action标识了动作是复制(1)或剪切(2),如下图所示:
1737334007702.jpg858908080.png

如下动图所示,我在17.1.10版本测试,单元格D4中公式为A3+B3,调整行顺序后变为A6+B6,即调整行顺序后公式引用自动同步变化。如果您使用的版本比17.1.10老,可以在最新版本测试。如果我的操作方式与您的操作方式不一致,需要您详细介绍下复现操作步骤。
调整行后公式引用自动变化.gif
回复 使用道具 举报
trace
初级会员   /  发表于:2025-1-20 12:02:45
3#
可以直接使用UI操作直接拖拽将row1和row2的顺序颠倒,这样公式引用是不变的。
spread.options.allowDragHeaderToMove = GC.Spread.Sheets.AllowDragHeaderToMove.both

然后直接拖拽行头或列头就行
回复 使用道具 举报
.fly
注册会员   /  发表于:2025-1-20 13:43:36
4#
Wilson.Zhang 发表于 2025-1-20 08:51
您好!可以通过ClipboaradPasting、ClipboardPasted事件监听粘贴,ClipboardChanging、ClipboardChanged事 ...

谢谢!我需要编程触发此事件,而不是监听。我的需求是对大量的,譬如1000行的单元格进行乱序重排,每行单元格都有若干值和公式引用。
回复 使用道具 举报
.fly
注册会员   /  发表于:2025-1-20 13:45:51
5#
trace 发表于 2025-1-20 12:02
可以直接使用UI操作直接拖拽将row1和row2的顺序颠倒,这样公式引用是不变的。
spread.options.allowDragHe ...

谢谢!我的需求是在后台对大量,譬如1000行的单元格进行乱序重排,而不是让用户手动触发
回复 使用道具 举报
.fly
注册会员   /  发表于:2025-1-20 19:53:32
7#
本帖最后由 .fly 于 2025-1-20 19:56 编辑
Wilson.Zhang 发表于 2025-1-20 17:44
通过您的描述,不太能想象您的具体场景,需要您详细介绍下。

以怎样的方式重排行?比如在数据源层根据 ...

我们希望将一张包含大量数据的表,根据一个外部的行索引,重新组织成任意的顺序,并隐藏不在索引中的部分,以形成这张表的一个“视图”。譬如[3,1,2],代表将第3行放到第1行,1->2,2->3,然后隐藏此外的行。
在重排的过程中,如果直接修改数据,我们还必须编写代码修改公式,以保持引用关系的一致性。因此,最初的想法是利用剪切。
您提到的排序方法很有启发,我想可以通过添加一个临时的整数列,按照目标排序来逆向这个列里数字的大小,然后直接调用spreadjs的排序方法,以实现我的需求。
谢谢!
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-1-21 10:14:46
8#
本帖最后由 Wilson.Zhang 于 2025-1-21 10:25 编辑
.fly 发表于 2025-1-20 19:53
我们希望将一张包含大量数据的表,根据一个外部的行索引,重新组织成任意的顺序,并隐藏不在索引中的部分 ...


不客气,我理解您的思路可行,那就沿着这个思路开发吧。如有新问题,欢迎发新帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部