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

QQ登录

只需一步,快速开始

大Vi

高级会员

186

主题

410

帖子

1310

积分

高级会员

积分
1310
大Vi
高级会员   /  发表于:2025-4-15 08:42  /   查看:115  /  回复:5
1金币
  1. let tempSpread = new GC.Spread.Sheets.Workbook()
  2. tempSpread.fromJSON(cloneDeep(spread.toJSON({
  3.     includeBindingSource: true,
  4.     columnHeadersAsFrozenRows: true
  5. })))

  6. tempSpread.sheets.forEach(s => {
  7.     s.options.isProtected = false
  8.     for (let row = 0; row < s.getRowCount(); row++) {
  9.         for (let col = 0; col < s.getColumnCount(); col++) {
  10.             const value = s.getValue(row, col)
  11.             console.log(32323, row, col, value)
  12.             }
  13.         }
  14.     }
  15. })
复制代码
在问在tempSpread.sheets循环里s的哪个字段表示sheet数据源?我自己用的for循环去获取每个行列的值,但有些单元格取到的值是null,这个怎么回事呢?我想取到值然后对数据进行修改。

最佳答案

查看完整内容

Worksheet:getDataSource()的使用有其前提条件,该接口会从当前运行的程序中获取返回结果。在通过Worksheet:getDataSource()对sheet绑定了数据源后,程序运行的内存中存储了数据源实体对象,此时修改数据也能同步至内存空间中的数据源实体,这便是数据绑定功能的双向绑定特性。 然而,如果只是导入了一个曾经被绑定了数据源的sheet导出的文件,当前Workbook实例所在的程序空间中没有数据源对应的对象,即没有调用Worksheet:se ...

5 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:6 天前
来自 4#
大Vi 发表于 2025-4-15 14:33
这个为什么不能用getDataSource拿到数据源?

Worksheet:getDataSource()的使用有其前提条件,该接口会从当前运行的程序中获取返回结果。在通过Worksheet:getDataSource()对sheet绑定了数据源后,程序运行的内存中存储了数据源实体对象,此时修改数据也能同步至内存空间中的数据源实体,这便是数据绑定功能的双向绑定特性。

然而,如果只是导入了一个曾经被绑定了数据源的sheet导出的文件,当前Workbook实例所在的程序空间中没有数据源对应的对象,即没有调用Worksheet:setDataSource()设置数据源,所以这种情况下无法使用Worksheet:getDataSource()获取到想要的数据。

另外,注意到您代码中使用“tempSpread.sheets”作为forEach的调用者。不建议您通过未公开的属性访问内部数据,这样可能导致数据获取错误,建议您使用公开API访问使用,对此可使用Workbook:getSheetCount()获取Workbook中的sheet个数,然后使用for语句遍历处理,如下代码所示:
  1. //  spread为Workbook实例
  2. for (var i = 0; i < spread.getSheetCount(); i++) {
  3.     var curSheet = spread.getSheet(i);
  4.     // 业务逻辑
  5.     ......
  6. }
复制代码


回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:6 天前
2#
您好!一般情况下,对应单元格中没有数据时,Worksheet:getValue()结果为null,您可以排查下看Worksheet:getValue()结果为null的单元格中是否有数据。

暂无API能够获取到所有sheet内所有数据,可以通过Worksheet:getUsedRange()了解sheet中被使用的区域,该接口也允许指定使用类型,比如数据(data)、样式(style)、Table(table)等,如下图所示:
UsedRangeType.png725308837.png

您可以缩小范围,仅对被使用了的区域进行遍历获取单元格中的数据。

回复 使用道具 举报
大Vi
高级会员   /  发表于:6 天前
3#
Wilson.Zhang 发表于 2025-4-15 14:07
您好!一般情况下,对应单元格中没有数据时,Worksheet:getValue()结果为null,您可以排查下看Worksheet:ge ...

这个为什么不能用getDataSource拿到数据源?
回复 使用道具 举报
大Vi
高级会员   /  发表于:6 天前
5#
Wilson.Zhang 发表于 2025-4-15 17:33
Worksheet:getDataSource()的使用有其前提条件,该接口会从当前运行的程序中获取返回结果。在通过Workshe ...

你们这个curSheet  也是一堆乱码一样的东西,可以转成正常可阅读的json对象吗?
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:5 天前
6#
大Vi 发表于 2025-4-15 20:57
你们这个curSheet  也是一堆乱码一样的东西,可以转成正常可阅读的json对象吗?

我在4楼给您提供的代码片段中的curSheet是Worksheet实例,是一个标准的JavaScript数据对象,按需调用Worksheet的公开API使用即可。

如果您想要直接操作json对象,对json对象内部进行修改,那不建议您这样做。产品在迭代升级版本的过程中会不可避免的引入新功能,相应地可能会引发json对象内部数据结构的变化,所以不推荐除fromJSON和toJSON以外的其他操作json数据对象的方式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部