为什么 getCell() 返回 "Range" 而不是值?

Why is getCell() returning "Range" instead of the values?

我正在开发一个非常简单的脚本,它将值记录在一列中,我之前在 Google Apps 脚本中使用了类似的结构并取得了巨大成功,但我看不到问题所在这里。 "statusColumn" 填充了不同的值,当我尝试像这样记录它们时,所有行都是 returns "Range"。关于为什么会这样有什么建议吗?

var statusColumn = 1;

function getOrders() {
    var ss = SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
    var sheet = ss.getSheetByName("Sheet8");
    var orders  = sheet.getDataRange();
    var numRows  = orders.getNumRows();

    for (var i = 1; i <= numRows; i++) {
        var status = orders.getCell(i, statusColumn);
        Logger.log([status]);
    }
}

编辑:

var statusColumn = 1;

function getOrders() {

     var ss =  SpreadsheetApp.openById("12y85GmJ94s6k3213j2nGK8rFr0GOfd_Emfk8WHu_MUQ");
     var sheet = ss.getSheetByName("Sheet8");
     var orders  = sheet.getDataRange();
     var numRows  = orders.getNumRows();

     for (var i = 1; i <= numRows; i++) {
         var statusCell = orders.getCell(i, statusColumn).getValue();
         Logger.log(statusCell)
     }
}

getCell() returns 一个Range对象,在这种情况下range表示单个单元格,但Range对象也可能表示一组单元格。您正在寻找单元格的值,可以使用 getValue() 从范围中检索该值。

Logger.log(status.getValue());

见: https://developers.google.com/apps-script/reference/spreadsheet/range https://developers.google.com/apps-script/reference/spreadsheet/range#getValue()

顺便说一句,您使用的方法(一次获取一个单元格)效率很低。相反,您应该使用 getRange() 获取整个列,然后使用 getValues() 获取所有值。 GetValues() 将 return 一个包含您所有状态值的数组。

这些函数都记录在上面的链接中。

您正在使用的功能完全符合其名称;获取 range.

要获取范围值,您需要使用 .getValues()

示例代码:

sheet.getRange('A1:A3').getValues();

.getRange().getDataRange() 之间的唯一区别是前者将 select 仅在您指定的范围内,如果您想将范围限制在特定范围内,这很好你的 sheet,而后面的 vill 会自动找到 sheet 和 return 中的所有值。

任何空单元格都将看起来像 [notemptycell, , ,],如果该行有 3 个空单元格,那么这就是一个数组。

记住;你 return 告诉你的对象是一个数组数组,因此你需要 for 循环两次这样的模式:

for (var i = 0; i < values.length; i++) {
  // Loops through the rows
  for (var j = 0; j < values[i].length; j++) {
    // Loops through the columns of a row
  }
}