繁体   English   中英

使用 Google Apps 脚本将数据保存在 Google 表格中

[英]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);
} 

我在您的代码中发现了一些问题:

  1. 如果您检查getValue()的用法,它只会返回一个单元格(所提供范围的左上角单元格)。

getValue() - 返回范围内左上角单元格的值。 该值可能是 Number、Boolean、Date 或 String 类型,具体取决于单元格的值。 空单元格返回一个空字符串。

相反,您应该使用 getValues() 来检索多个单元格的值。

getValues() - 返回值的二维数组,按行索引,然后按列。 这些值可能是 Number、Boolean、Date 或 String 类型,具体取决于单元格的值。 空单元格由数组中的空字符串表示。 请记住,虽然范围索引从 1、1 开始,但 JavaScript 数组的索引从 [0][0] 开始。

  1. 在工作表服务中,每个数组在 Google 工作表中都表示为行。 appendRow()只能接受一维数组,这意味着appendRow()只能 append 单行。 多行意味着多个 arrays 或二维数组。

例子:

在此处输入图像描述

如果您检索A1:A8的值,它将返回:

[[1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0], [8.0]]
  1. 要检索除空单元格之外的多个值,您可以在getLastRow() as numRows的帮助下使用getRange(row, column, numRows, numColumns)

  2. 对于 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.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM