我正在尝试在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]);
}
}
答案 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]);
}
}