
[英]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.