原因:Google Spreadsheet 在行數不足時,無法自動判斷新增行數來應付,自動增加行數需要自行添加程式處理。
舉例;對儲存格A1到A5有5個數字,使用Script 進行累加計算。
使用以下程式碼發生的錯誤。
function testSheetLastRow()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Row = ss.getRange("A:A").getValues();
var row = 0;
var sum = 0;
while (1)
{
sum = sum + Row[row][0];
Logger.log("row = " + parseInt(row, 10) + " Row[" + parseInt(row+1, 10) + "][0] = " + Row[row]);
row++;
Logger.log("row = " + parseInt(row, 10) + " Row[" + parseInt(row+1, 10) + "][0] = " + Row[row]+ " sum = " + sum);
Logger.log("-----------------------------");
}
}
由執行 Log 看出,當要索取第 6 行的儲存格,由於儲存格數只有 5 行,無法取得第 6 行的儲存格,導致出現錯誤。
解決方式:使用 getMaxRows() 取得儲存格的最大行數來限制執行。
function testSheetLastRow()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Row = ss.getRange("A:A").getValues();
var row = 0;
var sum = 0;
while (row < ss.getActiveSheet().getMaxRows())
{
sum = sum + Row[row][0];
Logger.log("row = " + parseInt(row, 10) + " Row[" + parseInt(row+1, 10) + "][0] = " + Row[row]);
row++;
Logger.log("row = " + parseInt(row, 10) + " Row[" + parseInt(row+1, 10) + "][0] = " + Row[row]+ " sum = " + sum);
Logger.log("-----------------------------");
}
}
如果 Spreadsheet 存在重要資料,又遇到行數不足問題,使用 getMaxRows()搭配getLastRow() 判斷資料行數是否不足,再以 insertRowAfter() 新增行數來解決。var ss = SpreadsheetApp.getActiveSpreadsheet();
if ((ss.getActiveSheet().getMaxRows() - ss.getLastRow()) < 2)
ss.insertRowAfter(ss.getActiveSheet().getMaxRows());
參考資料:


