
[英]Google Apps Script - Creating and Saving Filters for Google Sheets
[英]Saving data in Google Sheets with Google Apps Script
我正在嘗試使用以下 function 將數據保存到 Google 表格:
// function to save data
function saveData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var refresh_time = sheet.getRange('Testdata!A2:A').getValue();
sheet.appendRow([refresh_time]);
}
問題是只有單元格 A2 被保存,而不是整個范圍 A2:A 這可能是由於 appendRow。 還有像appendRange這樣的命令嗎?
要獲取 A2:A 中的值,您應該使用 getValues() 而不是 appendRow 而是 setValues()。 但是,我認為這不是您想要的。 A2:A 是 A 列中除第一個以外的所有單元格,並且可能包括空單元格。
而是試試這個:
function saveData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheets()[0];
var sheet2 = ss.getSheetByName("Testdata");
var refresh_time = sheet2.getRange(2,1,sheet2.getNumRows()-1,1).getValues();
sheet1.getRange(sheet1.getLastRow()+1,1,refresh_time.getLastRow(),refresh_time.getLastColumn()).setValues(refresh_time);
}
我在您的代碼中發現了一些問題:
getValue()
的用法,它只會返回一個單元格(所提供范圍的左上角單元格)。getValue() - 返回范圍內左上角單元格的值。 該值可能是 Number、Boolean、Date 或 String 類型,具體取決於單元格的值。 空單元格返回一個空字符串。
相反,您應該使用 getValues() 來檢索多個單元格的值。
getValues() - 返回值的二維數組,按行索引,然后按列。 這些值可能是 Number、Boolean、Date 或 String 類型,具體取決於單元格的值。 空單元格由數組中的空字符串表示。 請記住,雖然范圍索引從 1、1 開始,但 JavaScript 數組的索引從 [0][0] 開始。
appendRow()
只能接受一維數組,這意味着appendRow()
只能 append 單行。 多行意味着多個 arrays 或二維數組。 如果您檢索A1:A8
的值,它將返回:
[[1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0], [8.0]]
要檢索除空單元格之外的多個值,您可以在getLastRow()
as numRows
的幫助下使用getRange(row, column, numRows, numColumns)
。
對於 append 多個值,您必須在getRange(row, column, numRows, numColumns)
和array.length
的幫助下使用setValues()
。 numRows
可以通過計算二維數組或array.length
中的子數組的數量來確定,而row
可以通過使用getLastRow()
來確定。
這行代碼有效:
var sheet = ss.getSheets()[0];
var refresh_time = sheet.getRange('Testdata!A2:A').getValue();
但如果您聲明另一個變量來處理Testdata表,則效率更高。
您的最終代碼應如下所示:
function saveData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var testDataSheet = ss.getSheetByName("Testdata");
var refresh_time = testDataSheet.getRange(2, 1, testDataSheet.getLastRow()-1).getValues();
sheet.getRange(sheet.getLastRow()+1, 1, refresh_time.length, 1).setValues(refresh_time);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.