找回密码
 立即注册

QQ登录

只需一步,快速开始

红叶舞秋山

注册会员

12

主题

29

帖子

109

积分

注册会员

积分
109
红叶舞秋山
注册会员   /  发表于:2022-2-8 18:27  /   查看:1464  /  回复:7
1金币
  1. var activeSheet = spread.getActiveSheet();
复制代码
error Error: The tables cannot be intersected.
在react中 workbookInitialized 后, 获取到当前sheet,然后没有tables对象吗?
想给表格模板加数据源 一直不行!



最佳答案

查看完整内容

看了一下,有两个问题 1.是模板的问题,看下图: 这里模板上设置的bindingpath是table 那么people中的user也要改为table,table和user必须保持一致的,要么在模板定义时就把table改为user,要么就该数据源把user改为table 2.后续加载模板后不用再重新代码创建table了,因为模板已经设置过了,直接执行setDataSource即可。 我把代码改了一下,已经没问题了,您参考看一下

7 个回复

倒序浏览
最佳答案
最佳答案
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-8 18:27:05
来自 6#
看了一下,有两个问题
1.是模板的问题,看下图:
这里模板上设置的bindingpath是table
那么people中的user也要改为table,table和user必须保持一致的,要么在模板定义时就把table改为user,要么就该数据源把user改为table
2.后续加载模板后不用再重新代码创建table了,因为模板已经设置过了,直接执行setDataSource即可。
我把代码改了一下,已经没问题了,您参考看一下
  1. var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  2. var tableData = {"version":"14.2.5","font":"12pt Arial","customList":[],"sheetCount":1,"sheets":{"Sheet1":{"name":"Sheet1","isSelected":true,"activeRow":11,"activeCol":3,"frozenTrailingRowStickToEdge":true,"frozenTrailingColumnStickToEdge":true,"theme":"Office2007","data":{"defaultDataNode":{"style":{"themeFont":"Body"}},"dataTable":{}},"rowHeaderData":{"defaultDataNode":{"style":{"themeFont":"Body"}}},"colHeaderData":{"defaultDataNode":{"style":{"themeFont":"Body"}}},"leftCellIndex":0,"topCellIndex":0,"selections":{"0":{"row":11,"rowCount":1,"col":3,"colCount":1},"length":1},"rowOutlines":{"items":[]},"columnOutlines":{"items":[]},"cellStates":{},"states":{},"outlineColumnOptions":{},"autoMergeRangeInfos":[],"printInfo":{"paperSize":{"width":850,"height":1100,"kind":1}},"tables":[{"name":"gcTable0","row":5,"col":3,"rowCount":2,"colCount":2,"style":{"buildInName":"Medium2"},"autoGenerateColumns":false,"bindingPath":"table","rowFilter":{"range":{"row":6,"rowCount":1,"col":3,"colCount":2},"typeName":"HideRowFilter","dialogVisibleInfo":{},"filterButtonVisibleInfo":{"0":true,"1":true},"showFilterButton":true},"columns":[{"id":0,"name":"name","dataField":"name"},{"id":1,"name":"age","dataField":"age"}]}],"shapeCollectionOption":{"snapMode":0},"index":0}}};
  3. spread.fromJSON(tableData)
  4. var activeSheet = spread.getActiveSheet();
  5. /*测试数据源 */
  6. var people = {
  7.     table: [
  8.     {name: "yaojia", age: 40, },
  9.     {name: "lili", age: 22 , },
  10.     {name: "coco", age: 222 , }

  11. ]}

  12. var source = new GC.Spread.Sheets.Bindings.CellBindingSource(people)

  13. activeSheet.setDataSource(source)
复制代码


image.png417776793.png
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-8 18:34:26
2#
The tables cannot be intersected.
上面是说工作表中的表格可能存在相交
也就是对应类似下面这种情况
image.png110426024.png
如上图所示如果我要在选中范围内插入一个table,Excel中插入table的按钮会灰掉
image.png826882934.png
因为table之间允许相交,您那个提示也是一样的问题,因为SpreadJS是代码控制没有界面,所以会有报错提示
回复 使用道具 举报
红叶舞秋山
注册会员   /  发表于:2022-2-9 09:11:54
3#
非常感谢 原理知道呢。
回复 使用道具 举报
红叶舞秋山
注册会员   /  发表于:2022-2-9 11:12:11
4#
微信图片_20220209102343.png

使用designer设计器提前设备了一个模板绑定好了表格数据源。

然后显示的时候想在模板数据源位置显示表格数据。但是失败了。

以下是代码:
tabledata是designer设计器导出的包含表格数据源绑定的模板数据。
people 是需要加载的数据源。
  1. const workbookInitialized = (spread : any) =>{
  2.      var tableData = {"version":"14.2.5","font":"12pt Arial","customList":[],"sheetCount":1,"sheets":{"Sheet1":{"name":"Sheet1","isSelected":true,"activeRow":11,"activeCol":3,"frozenTrailingRowStickToEdge":true,"frozenTrailingColumnStickToEdge":true,"theme":"Office2007","data":{"defaultDataNode":{"style":{"themeFont":"Body"}},"dataTable":{}},"rowHeaderData":{"defaultDataNode":{"style":{"themeFont":"Body"}}},"colHeaderData":{"defaultDataNode":{"style":{"themeFont":"Body"}}},"leftCellIndex":0,"topCellIndex":0,"selections":{"0":{"row":11,"rowCount":1,"col":3,"colCount":1},"length":1},"rowOutlines":{"items":[]},"columnOutlines":{"items":[]},"cellStates":{},"states":{},"outlineColumnOptions":{},"autoMergeRangeInfos":[],"printInfo":{"paperSize":{"width":850,"height":1100,"kind":1}},"tables":[{"name":"gcTable0","row":5,"col":3,"rowCount":2,"colCount":2,"style":{"buildInName":"Medium2"},"autoGenerateColumns":false,"bindingPath":"table","rowFilter":{"range":{"row":6,"rowCount":1,"col":3,"colCount":2},"typeName":"HideRowFilter","dialogVisibleInfo":{},"filterButtonVisibleInfo":{"0":true,"1":true},"showFilterButton":true},"columns":[{"id":0,"name":"name","dataField":"name"},{"id":1,"name":"age","dataField":"age"}]}],"shapeCollectionOption":{"snapMode":0},"index":0}}};

  3.       
  4.      spread.fromJSON(tableData)

  5.       var activeSheet = spread.getActiveSheet();

  6.       var table = activeSheet.tables.add('myTable',4,6,3,3);

  7.       table.bindingPath('user');

  8.      /*测试数据源 */
  9.       var people = {
  10.         user: [
  11.         {name: "yaojia", age: 40, },
  12.         {name: "lili", age: 22 , },
  13.         {name: "coco", age: 222 , }

  14.     ]}

  15.     var source = new GC.Spread.Sheets.Bindings.CellBindingSource(people)

  16.     activeSheet.setDataSource(source)
复制代码


回复 使用道具 举报
红叶舞秋山
注册会员   /  发表于:2022-2-9 13:27:05
5#
Clark.Pan 发表于 2022-2-8 18:34
The tables cannot be intersected.
上面是说工作表中的表格可能存在相交
也就是对应类似下面这种情况

帮看看哈 谢谢 谢谢
回复 使用道具 举报
红叶舞秋山
注册会员   /  发表于:2022-2-9 17:58:32
7#
神!!解决! 看来只看文档是不够的
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-9 18:03:19
8#
,那本帖就先结贴了,有问题欢迎另开新帖交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部