我正在尝试在 google 电子表格中创建一个输入字段以启用简单的数据收集,但我在使用 for 循环时遇到了一些问题。我是 JS 新手,这是我第一次尝试使用 Google Apps 脚本。
应用逻辑: - 输入字段中的数据(“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]);
}
}
最佳答案
以下dashboard.getRange("F13:F36")
函数返回一个范围类而不是数组。因此,当您尝试获取像这样的长度时,inputRange.length
会返回 undefined 并且循环永远不会运行。
您可以使用 getValues
获取单元格的值并在循环中遍历数组并将值附加到数据库表中,就像这样
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]);
}
}
关于javascript - 谷歌应用程序脚本 : Sheets: Append data from an input range in Sheet1 to a dataset in Sheet2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48325476/