为什么getCell()返回"范围"而不是价值观?

时间:2015-10-30 19:10:48

标签: javascript for-loop google-apps-script google-sheets range

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

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)
     }
}

2 个答案:

答案 0 :(得分:2)

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

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()将返回一个包含所有状态值的数组。

这些功能都记录在上面的链接中。

答案 1 :(得分:2)

你正在使用的功能正如它的名字所说的那样;获得范围

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

示例代码:

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

.getRange().getDataRange()之间的唯一区别是,前者只会选择您指定的范围,如果您希望将范围限制为工作表中的特定范围,则效果很好vill会自动在工作表中找到alll值并返回给您。

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

记住;你返回给你的对象是一个数组数组,因此你需要循环两次这个模式:

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
  }
}