【问题标题】:Google Apps Script: Sheets: Append data from an input range in Sheet1 to a dataset in Sheet2Google Apps 脚本:表格:将 Sheet1 中输入范围中的数据附加到 Sheet2 中的数据集
【发布时间】:2018-01-18 16:03:06
【问题描述】:
我正在尝试在谷歌电子表格中创建一个输入字段以启用简单的数据收集,但我在使用 for 循环时遇到了一些问题。我是 JS 新手,这是我第一次尝试使用 Google Apps Script。
应用逻辑:
- 数据输入到输入字段(“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]);
}
}
【问题讨论】:
标签:
javascript
google-apps-script
google-sheets
【解决方案1】:
以下dashboard.getRange("F13:F36") 函数返回范围类而不是数组。因此,当您尝试获得像 inputRange.length 这样的长度时,您会得到未定义的返回,并且永远不会运行循环。
您可以使用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]);
}
}