GAS:用于检索Google电子表格ADDS列中的最后一行的函数

时间:2014-02-08 04:34:29

标签: google-apps-script google-sheets

我多次使用此功能来检索Google电子表格的最后一行数据,但这次我得到了一些非常奇怪的行为。

字面上观看电子表格添加列,因为这段代码正在运行。最终我遇到 256 列限制,我的脚本执行失败。

我已经注释掉了我的所有代码并专门运行了这个功能,但我仍然遇到了同样的问题。

以前有没有人经历过这种情况,或者有其他解决方案?

//Grabs the latest data submission and return it as an array.
function getLastSubmit() {
    //Find the Spreadsheet containing the data we need.
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses");

    //Get the last row and column width of the sheet.
    var lastRow = sheet.getLastRow();
    var lastColumn = sheet.getLastColumn();

    Logger.log("lastRow=" + lastRow);
    Logger.log("lastColumn=" + lastColumn);

    var range = sheet.getRange(lastRow, 1, 1, lastColumn);
    var values = new Array();

    for (var i = 0; i < lastColumn; i++) {
        Logger.log(range.offset(0, i).getValue());
        values.push(range.offset(0, i).getValue());
    }

    Logger.log("values=" + values);

    //Return the values of the lastRow from 0 to the lastColumn.
    return values;
}

此外,Execution Transcript说明以下内容(我显然没有尝试检索超出范围的数据。):

[14-02-07 21:13:47:648 MST] Logger.log([, []]) [0 seconds]
[14-02-07 21:13:47:648 MST] Range.offset([0, 116]) [0 seconds]
[14-02-07 21:13:47:702 MST] Range.getValue() [0.053 seconds]
[14-02-07 21:13:47:702 MST] Range.offset([0, 117]) [0 seconds]
[14-02-07 21:13:47:765 MST] Range.getValue() [0.062 seconds]
[14-02-07 21:13:47:773 MST] Execution failed: You can't add any more columns to this sheet. There is a limit of  columns per sheet. To continue working, create a new sheet or a new workbook. For more information on size and complexity limits in Google spreadsheets, visit the <a target=_blank href=>Google Docs Help Center.</a> (line 19, file "Functions") [16.023 seconds total runtime]

我的记录器:

[14-02-07 21:13:31:908 MST] lastRow=3
[14-02-07 21:13:31:908 MST] lastColumn=140

1 个答案:

答案 0 :(得分:1)

如果您阅读documentation :

,则使用offset方法

offset(rowOffset,columnOffset) 返回一个新范围,该范围偏离此范围的给定行数和列数(可以为负数)。新范围将与原始范围相同。

所以您所遇到的是合乎逻辑的,因为您移动您的选择的索引值为i 在这两行中:

        Logger.log(range.offset(0, i).getValue());
        values.push(range.offset(0, i).getValue());

我猜您之前没有注意到它可能是因为您的工作表更短,因此它从未超过256列限制。