Google Apps脚本:表格:将Sheet1中输入范围的数据附加到Sheet2中的数据集

时间:2018-01-18 16:03:06

标签: javascript google-apps-script google-sheets

我正在尝试在google电子表格中创建一个输入字段以启用简单的数据收集,但我在使用for循环时遇到了一些问题。我是JS新手,这是我第一次尝试使用Google Apps脚本。

App逻辑: - 输入到输入字段的数据(“Sheet1!F13:F36”) - 单击分配了脚本的按钮 - 数据从输入字段加载并附加到Sheet2

中的数据集

请参阅下面的代码:

function appendToDB() {
  
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var dashboard = ss.getSheetByName("Dashboard");
 var inputRange = dashboard.getRange("F13:F36");
 var db =  ss.getSheetByName("Database");
 var storeName = dashboard.getRange("C7").getValue();
 var category = dashboard.getRange("C9").getValue();  
  
  for(var i=0; i<inputRange.length; i++){
   
   var currentCellValue = inputRange[i].getValue();
   
   db.appendRow([storeName,category,currentCellValue]);
  }
  
}

1 个答案:

答案 0 :(得分:1)

以下dashboard.getRange("F13:F36")函数返回范围类而不是数组。因此,当您尝试获得类似inputRange.length的长度时,您会得到未定义的返回值,并且循环永远不会运行。

您可以使用getValues获取单元格的值并在循环中运行数组并将值附加到db表中

function appendToDB() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var dashboard = ss.getSheetByName("Dashboard");
 var inputRange = dashboard.getRange("F13:F36").getValues();  //returns a 2D array
 var db =  ss.getSheetByName("Database");
 var storeName = dashboard.getRange("C7").getValue();
 var category = dashboard.getRange("C9").getValue();  

  for(var i=0; i<inputRange.length; i++){

   var currentCellValue = inputRange[i][0];

   db.appendRow([storeName,category,currentCellValue]);
  }

}

等效地,您可以使用范围类的getNumRows()函数来获取行数。使用它作为计数器循环,以通过getCell(row,column).getValue()

获取单个单元格的单个值

看起来像这样:

function appendToDB() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var dashboard = ss.getSheetByName("Dashboard");
 var inputRange = dashboard.getRange("F13:F36");
 var db =  ss.getSheetByName("Database");
 var storeName = dashboard.getRange("C7").getValue();
 var category = dashboard.getRange("C9").getValue();  

  for(var i=1; i<=inputRange.getNumRows(); i++){

   var currentCellValue = inputRange.getCell(i,1).getValue();

   db.appendRow([storeName,category,currentCellValue]);
  }

}