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

QQ登录

只需一步,快速开始

甘苦绿茶

金牌服务用户

4

主题

15

帖子

67

积分

金牌服务用户

积分
67
最新发帖
甘苦绿茶
金牌服务用户   /  发表于:2025-3-12 12:18  /   查看:101  /  回复:12
附图:
image.png11389769.png

说明:
1、虽然调用 table.expandBoundRows(true) 后,不会在报错。但却会不符合期望地多出来 2 行

12 个回复

倒序浏览
Matthew.Xue
超级版主   /  发表于:5 天前
沙发
您好, 这个原因应该和自定义单元格无关,而是因为你的数据扩展后,行数超过了现在sheet的行数。您可以在setDataSource之前,调用sheet.setRowCount来让行数增加,增加的数量和您数据源中数据的数量有关,您可以试试。
回复 使用道具 举报
回复 使用道具 举报
  1. window.onload = function () {
  2.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  3.         initSpread(spread);
  4. };

  5. var HTMLCellType = function HTMLCellType(options){};
  6. HTMLCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
  7. HTMLCellType.prototype.paint = function(){};

  8. function initSpread(spread) {
  9.         var spreadNS = GC.Spread.Sheets;
  10.        
  11.         var sheet = spread.getSheet(0);
  12.         spread.suspendPaint();

  13.         sheet.setColumnWidth(0, 70);
  14.         sheet.setColumnWidth(1, 70);
  15.         sheet.setColumnWidth(2, 70);
  16.         sheet.setColumnWidth(3, 70);
  17.         sheet.setColumnWidth(4, 100);
  18.         sheet.setColumnWidth(5, 100);
  19.         sheet.setRowCount(4);

  20.         var table = sheet.tables.add(
  21.                 'default',
  22.                 1, 0,
  23.                 2, 6,
  24.                 GC.Spread.Sheets.Tables.TableThemes.light21
  25.         );
  26.         table.showHeader(true);
  27.         table.setColumnFormula(2, "=SUBTOTAL(109,[Credit])");
  28.         table.setColumnFormula(3, "=SUBTOTAL(109,[Score])");

  29.         var tableColumns = [];
  30.         [
  31.                 {key: "Course", title: "course"},
  32.                 {key: "Term", title: "term"},
  33.                 {key: "Credit", title: "credit"},
  34.                 {key: "Score", title: "score"},
  35.                 {key: "Teacher", title: "teacher"},
  36.                 {key: "Intro", title: "intro"},
  37.         ].forEach(function(columnConfig, columnIndex){
  38.                 var tableColumn = new GC.Spread.Sheets.Tables.TableColumn(columnIndex);
  39.                 tableColumns.push(tableColumn);
  40.                 tableColumn.dataField(columnConfig.key);
  41.                 tableColumn.name(columnConfig.title);
  42.         });
  43.         table.autoGenerateColumns(false);
  44.         table.bindColumns(tableColumns);
  45.         table.bindingPath("data");

  46.         /*****************************************/

  47.         var dataList = [
  48.                 { Course: "Calculus", Term: 1, Credit: 5, Score: 80, Teacher: "Nancy Feehafer", Intro: "<p>helo</p>" },
  49.                 { Course: "P.E.", Term: 1, Credit: 3.5, Score: 85, Teacher: "Andrew Cencini", Intro: "<p>helo</p>"  },
  50.         ];

  51.         let style = new GC.Spread.Sheets.Style();
  52.         style.cellType = new HTMLCellType();
  53.         for(var i = 0; i < dataList.length; i++){
  54.                 /* cellType 设置为 null 即正常 */
  55.                 // style.cellType = null;
  56.                 sheet.setStyle(i + 2, 5, style);
  57.         }

  58.         sheet.setDataSource(new GC.Spread.Sheets.Bindings.CellBindingSource({ data: dataList }));

  59.         spread.resumePaint();
  60. }
复制代码

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:5 天前
5#
您好!参考2楼给出的回复,扩展sheet行数使得能容纳下Table所有数据即可,您可以亲测了解下。
回复 使用道具 举报
甘苦绿茶
金牌服务用户   /  发表于:5 天前
6#
我的样例中,sheet.setRowCount(4) 难道不够吗?1行空行 + 1行表头行 + 2行数据行 不就是 4 行吗
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:4 天前
7#
甘苦绿茶 发表于 2025-3-12 18:29
我的样例中,sheet.setRowCount(4) 难道不够吗?1行空行 + 1行表头行 + 2行数据行 不就是 4 行吗

按理说是符合的,测试了下您提供的代码片段,绑定数据渲染后Table的数据区域有3行,加上sheet首行和Table表头行一共5行。那么, sheet已有的4行不足以容纳5行数据,便抛出异常提醒错误。

在注释掉设置自定义单元格类型后,对sheet设置4行,可以正常渲染,如下图所示:
1741835053186.png337593077.png

请教下您设置自定义单元格想要实现怎样的效果?
回复 使用道具 举报
甘苦绿茶
金牌服务用户   /  发表于:4 天前
8#
1、为什么数据区域会有 3 行呢?我提供的 dataList 数组明明只有 2 条呢
2、设置自定义单元格,是为了渲染富文本,如下所示:
image.png819692382.png
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:4 天前
9#
甘苦绿茶 发表于 2025-3-13 11:08
1、为什么数据区域会有 3 行呢?我提供的 dataList 数组明明只有 2 条呢
2、设置自定义单元格,是为了渲染 ...

在未填充数据源时,Table仅有两行,一行表头行,另一行数据区域行,如下图所示:
1741836712332.png589020690.png

此时设置自定义单元格类型,被设置行索引分别为2和3,如下图所示:
1741836907206.png270430907.png

由于Table区域起始行索引为1,跨越2行,那么,末行索引为2。也就是说,Table区域中仅单元格F3设置了自定义单元格类型,而F4此时位于Table外,如下图所示:
1741837197045.png10815733.png


对sheet设置数据源后,数据绑定将数据源中数据填充至Table。Table虽然只有一行数据区域,但其默认允许自动扩展。当Table数据区域行数小于数据源数量时,自动扩展一行以填充数据源中第二条数据,相应地,原来索引为3的行也顺势下移。但是,由于此时sheet一共四行,而Table自动扩展后加上sheet首行空行已经达到4行,而原来索引为3的行下移受阻,便抛出了异常。

可以在sheet数据绑定填充后对Table某列逐一设置自定义单元格类型,或者初始化Table时给足区域令其足以容纳数据源中所有数据。
回复 使用道具 举报
甘苦绿茶
金牌服务用户   /  发表于:4 天前
10#
Wilson.Zhang 发表于 2025-3-13 11:45
在未填充数据源时,Table仅有两行,一行表头行,另一行数据区域行,如下图所示:

这个过程,为什么会和 自定义单元格类型 建立上了联系呢?毕竟没有设置 自定义单元格类型 时,是没有问题的。
按照您描述的逻辑,似乎应该“业务代码一直需要向 table 多提供一行,无论是否是自定义单元格类型”才对
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部