找回密码
 立即注册

QQ登录

只需一步,快速开始

littleknife
金牌服务用户   /  发表于:2024-10-8 17:21  /   查看:360  /  回复:10
1金币
我在toJSON之后发现rows这个数组会记录,有没有其他快捷的接口可以获取呢,而不用每次都toJSON之后再去取 image.png58521117.png

最佳答案

查看完整内容

如果用户是在MS Excel中对单元格设置了高度,那不会自动对这种单元格设置名称。我们之前提供的方案针对于您在使用SpreadJS和Designer时,可以通过RowHeightChanged或RowHeightChanging事件监听行高变化的行索引信息,继而通过单元格名称标记。 如果您的使用场景中存在用户在线下通过MS Excel调整单元格行高,那确实无法生效,除非跟用户约定在调整行高时为相关单元格设置名称。但是,这样似乎有些奇怪。 或者在读入线下文 ...

10 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-10-8 17:21:48
来自 6#
littleknife 发表于 2024-10-9 10:03
但是这样的话,如果是用户导入的表是不是就会有问题,如果他们在excel中设置过了高度,导入到spread中是 ...

如果用户是在MS Excel中对单元格设置了高度,那不会自动对这种单元格设置名称。我们之前提供的方案针对于您在使用SpreadJS和Designer时,可以通过RowHeightChanged或RowHeightChanging事件监听行高变化的行索引信息,继而通过单元格名称标记。

如果您的使用场景中存在用户在线下通过MS Excel调整单元格行高,那确实无法生效,除非跟用户约定在调整行高时为相关单元格设置名称。但是,这样似乎有些奇怪。

或者在读入线下文件后,遍历每行获取行高,并且与默认行高对比,如果行高与默认行高不一致,对其自适应行高。

您可以评估下上述方案是否适用于您的业务场景。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-8 17:37:46
2#
您好!JSON数据中rows属性记录这些被设置的行高列宽信息,在被导入后根据这些信息设置行高列宽。您需要获取的是用户自行通过UI或者代码侧通过Worksheet:setRowHeight()设置了行高的行信息吗?请问下您获取这个信息用以完成什么需求呢?
回复 使用道具 举报
littleknife
金牌服务用户   /  发表于:2024-10-8 17:47:58
3#
Wilson.Zhang 发表于 2024-10-8 17:37
您好!JSON数据中rows属性记录这些被设置的行高列宽信息,在被导入后根据这些信息设置行高列宽。您需要获取 ...

ui和setRowHeight都有用到,现在在做一个行高自适应的需求,如果用户自行设置过的行高则不进行自适应
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-8 17:51:09
4#
littleknife 发表于 2024-10-8 17:47
ui和setRowHeight都有用到,现在在做一个行高自适应的需求,如果用户自行设置过的行高则不进行自适应

那可以对用户自行设置了行高的单元格做标记,比如通过Worksheet:addCustomName()设置一个名称,判断单元格是否有名称来识别。您可以自行评估下看是否能满足您的需求。

可以参考官网API文档了解详情:
Worksheet:addCustomName()--https://demo.grapecity.com.cn/sp ... sheet#addcustomname
回复 使用道具 举报
littleknife
金牌服务用户   /  发表于:2024-10-9 10:03:55
5#
Wilson.Zhang 发表于 2024-10-8 17:51
那可以对用户自行设置了行高的单元格做标记,比如通过Worksheet:addCustomName()设置一个名称,判断单元 ...

但是这样的话,如果是用户导入的表是不是就会有问题,如果他们在excel中设置过了高度,导入到spread中是没有这个标记的
回复 使用道具 举报
littleknife
金牌服务用户   /  发表于:2024-10-11 18:38:42
7#
Wilson.Zhang 发表于 2024-10-9 10:36
如果用户是在MS Excel中对单元格设置了高度,那不会自动对这种单元格设置名称。我们之前提供的方案针对于 ...

我使用这种方法去设置,但是发现一个问题,就是autoFitRow会触发RowHeightChanged,那么我就无法区分是用户拖拽导致的行高变化还是autoFitRow导致的行高变化
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-12 08:43:09
8#
littleknife 发表于 2024-10-11 18:38
我使用这种方法去设置,但是发现一个问题,就是autoFitRow会触发RowHeightChanged,那么我就无法区分是用 ...

autoFitRow也改变了行高,触发RowHeightChanged事件也是正常的响应。应对您的需求,可以在代码全局设置一个变量记录是否为autoFitRow标记,同时在RowHeightChanged事件中根据该标记判断触发行高变化的动作是自适应行高还是手动设置。具体思路如下所述:

1. 设定autoFitRowFlag变量以记录是否为代码autoFitRow自适应行高,默认为false。
2. 在调用Worksheet:autoFitRow()前将autoFitRowFlag修改为true。
3. 在RowHeightChanged事件处理函数中,判断autoFitRowFlag变量的值:
3.1. 如果为true,即autoFitRow代码设置自适应行高,则在处理完相关业务逻辑前或后设置其为false。
3.2. 如果为false,则非autoFitRow代码设置自适应行高,则可执行相关业务逻辑。

可参考如下代码:
  1. var autoFitRowFlag = false;
  2. function wordWrap(row, col) {
  3.     sheet.getCell(row, col).wordWrap(true);
  4.     autoFitRowFlag = true;
  5.     sheet.autoFitRow(row);
  6. }
  7. sheet.unbind(GC.Spread.Sheets.Events.RowHeightChanged);
  8. sheet.bind(GC.Spread.Sheets.Events.RowHeightChanged, function(e, args) {
  9.     console.log('row height changed, args: ', args);
  10.     if (autoFitRowFlag) {
  11.         console.log('auto fit row');
  12.        autoFitRowFlag = false;
  13.     } else {
  14.         console.log('manual set row height');
  15.     }
  16. });
复制代码

如上所述方案仅能控制调用Worksheet:autoFitRow()代码时触发的RowHeightChanged事件,无法控制工具栏菜单选项“自适应行高”触发的RowHeightChanged事件。您可以评估下看能否满足需求。
回复 使用道具 举报
littleknife
金牌服务用户   /  发表于:2024-10-12 10:30:56
9#
Wilson.Zhang 发表于 2024-10-12 08:43
autoFitRow也改变了行高,触发RowHeightChanged事件也是正常的响应。应对您的需求,可以在代码全局设置一 ...

感谢,但是这个方法在我们的业务场景中还是不太适用,请问自适应的规则是怎样的呢,我想通过了解这个规则去手动计算然后setRowHeight,这样就不会触发rowHeightChanged
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-12 12:19:35
10#
littleknife 发表于 2024-10-12 10:30
感谢,但是这个方法在我们的业务场景中还是不太适用,请问自适应的规则是怎样的呢,我想通过了解这个规则 ...

您可以参考如下链接中帖子2楼和6楼的回复了解SpreadJS原生支持的自定义自适应行高列宽的方式,看看能不能实现您的需求。

https://gcdn.grapecity.com.cn/showtopic-223233.html
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部