簡體   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