我正在嘗試從具有不同行數的多個谷歌作業表中獲取資料并將其放入單個陣列中。我試圖在已經獲得每張作業表的情況下使用內置的 getLastRow 方法。有沒有辦法查看 for 正在處理的作業表的最后一行?
我的代碼
function getData(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ws = ss.getSheets();
const data = [];
for (i = 0; i<ws.length; i ){
data.push(ws[i].getRange(1,1,ws[i].getLastRow()).getValues());
}
Logger.log(data)
}
當我運行此代碼時,出現以下錯誤
Exception: The number of rows in the range must be at least 1.
我試圖將最后一行放在它自己的陣列中,但是 getRange 不會將它識別為數字。
function getData(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ws = ss.getSheets();
const data = [];
const lr = [];
for (i = 0; i<ws.length; i ){
lr.push(ws[i].getLastRow());
data.push(ws[i].getRange(1,1,lr[i]).getValues());
}
Logger.log(data)
}
如果我在陣列中選擇一個特定元素,代碼將運行但不起作用,因為它只會回傳該值的行。
function getData(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ws = ss.getSheets();
const data = [];
const lr = [];
for (i = 0; i<ws.length; i ){
lr.push(ws[i].getLastRow());
data.push(ws[i].getRange(1,1,lr[0]).getValues());
}
Logger.log(data)
}
uj5u.com熱心網友回復:
問題:
您的一些作業表完全是空的,因此
ws[i].getLastRow()回傳0。但是您不能在getRange(row, column, numRows)函式的任何引數中傳遞 0 ,因此您會收到此錯誤。
解決方案:
檢查作業表中是否至少有一行內容:
function getData(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ws = ss.getSheets();
const data = [];
for (i = 0; i<ws.length; i ){
lrow = ws[i].getLastRow();
//check if there is at least one row with content in the sheet
if(lrow>0){
data.push(ws[i].getRange(1,1,lrow).getValues());
}
}
Logger.log(data);
}
uj5u.com熱心網友回復:
我相信這是因為您的某些作業表沒有資料。您可以跳過這些表格:
function getData() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ws = ss.getSheets();
const data = [];
const lr = [];
for (i = 0; i < ws.length; i ) {
lr.push(ws[i].getLastRow());
if (lr[i] > 0) {
data.push(ws[i].getRange(1, 1, lr[i]).getValues());}
else {
data.push([]); // empty sheet
}
}
Logger.log(data)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/428179.html
上一篇:用逗號分隔資料,然后在Google作業表上堆疊成一列?
下一篇:格式化表格并發送電子郵件
