【问题标题】:I'm keep getting an error that says the column of the range is too small我不断收到错误消息,指出范围列太小
【发布时间】:2023-01-13 08:44:10
【问题描述】:

我正在编写一些代码,当我尝试运行它时出现错误

范围的起始列太小。

我正在使用 Google Apps 脚本

我得到的错误是在这条线上

var cellCup = ss.getRange(ctCup, 0).activate().getValue();
const ss = SpreadsheetApp.openByUrl(THIS).getSheetByName('WP_Data');
var ctCup =114;
var cellCup = ss.getRange(ctCup, 0).activate().getValue();

但它在这里有效

    var ctMHS = 3;
    var cellMHS = ss.getRange('A3');
    while ( cellMHS.offset(ctMHS, 0).getValue() != "" ) {
      ctMHS++;
    }

【问题讨论】:

  • getRange 是采用基于“0”的索引还是从 1 开始?
  • 它从第 114 行和第 0 列开始
  • getRange 从第 1 行第 1 列开始
  • 在这种情况下,我如何从 ctCup 行和第 1 列开始?
  • 顺便说一句,.activate()是不必要的:你可以做ss.getRange(ctCup, 0).getValue();

标签: javascript google-apps-script google-sheets


【解决方案1】:

正如 Kostas 所回答的那样,.getRange() 的列索引和行索引应该从 1 开始。

此 sn-p 使用 0 索引的原因:

cellMHS.offset(ctMHS, 0).getValue()

.offset() 方法不同于.getRange() 方法:.offset() 不期望绝对单元格或行索引:它的参数是偏移量相对的cellMHS代表的范围,即离那个范围有多远。因此,值为 0 仅表示使用与原始范围相同的列。您甚至可以传递负偏移量来引用 cellMHS 左侧的列。

【讨论】:

  • 是的,这是有道理的。谢谢
【解决方案2】:

根据 Google App Script 文档https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow,-column

The column index of the cell to return; column indexing starts with 1.

这应该可以解决您的问题:

var cellCup = ss.getRange(ctCup, 1).activate().getValue();

【讨论】:

  • 但是你知道为什么它在那种情况下有效吗?我编辑了我的问题
  • 工作表中的索引不为零。这意味着 1 描述了其中的第一行/列。 ss.getRange('A3'); 称为 a1 表示法,在文档中的解释如下:developers.google.com/apps-script/reference/spreadsheet/…
【解决方案3】:

如果您使用的是 Visual Studio Code,请尝试重新打开该程序,因为它发生在我身上,所以有点小故障。

【讨论】:

  • 我正在使用谷歌应用脚​​本
  • 您的答案可以通过其他支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写出好的答案的信息in the help center
猜你喜欢
  • 2023-01-14
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多