google-apps-script - 循环浏览多个谷歌表格的多个标签
问题描述
我正在努力创建一个基于谷歌表格文档文件夹(目前有 6 个文件)的“主”谷歌表格。这些工作表中的每一个都有稍微不同数量的选项卡(有些名称略有不同),但我想循环一个公式来获取每个工作表文件中每个选项卡的值。(例如,fileA 有 3 个选项卡,我想从每个选项卡中获取数据并在具有 4 个选项卡的 fileB 中类似地重复)。我也想跳过一些命名的标签。
这是我的一段代码(2个隔行扫描函数):
function getDataFromSpreadsheet(ssID){
var ss = SpreadsheetApp.openById(ssID)
var allsheets = ss.getSheets();
for(var s in allsheets){
var sheet = allsheets[s];
var data = []
if(
(sheet.getName() == "Summary") ||
(sheet.getName() == "Data") ||
(sheet.getName() == "Sheet1") ||
(sheet.getName()== "Sheet2")
) continue;
var lastrownum = sheet.getLastRow();
var values = sheet.getRange("A2:L" + lastrownum).getValues();
data = data.concat(values)
Logger.log(data);
return data;
}
}
但是,这只是从每个文件中未命名为“摘要”、“数据”等的一个选项卡中获取/保存数据。
如何让它遍历所有工作表文件中的所有(非排除)选项卡???我无法编辑文件,因为这是为了创建一个自动化系统。
解决方案
解释:
for...in
在 javascript 中迭代数组不是一个好习惯。如果您想了解更多信息,请参阅这篇文章。
但是,您的代码中有两个问题:
您
var data = []
在循环内部,每次重新定义数组时都会清除以前的值。您在循环中使用语句
return
,这意味着函数将在第一次迭代中终止,因为返回是每个函数执行的停止点。
解决方案(推荐):
我建议您使用forEach:
function getDataFromSpreadsheet(ssID){
const ss = SpreadsheetApp.openById(ssID)
const allsheets = ss.getSheets();
const sheetsToExclude = ["Summary","Data","Sheet1","Sheet2"];
const data = [];
allsheets.forEach(sheet=>{
if(!sheetsToExclude.includes(sheet.getName())){
var lastrownum = sheet.getLastRow();
var values = sheet.getRange("A2:L" + lastrownum).getValues();
data = data.concat(values)
}
});
Logger.log(data);
return data;
}
但是您的解决方案(在解决问题后)将像这样工作:
function getDataFromSpreadsheet(ssID){
var ss = SpreadsheetApp.openById(ssID)
var allsheets = ss.getSheets();
var data = []
for(var s in allsheets){
var sheet = allsheets[s];
if(
(sheet.getName() == "Summary") ||
(sheet.getName() == "Data") ||
(sheet.getName() == "Sheet1") ||
(sheet.getName()== "Sheet2")
) continue;
var lastrownum = sheet.getLastRow();
var values = sheet.getRange("A2:L" + lastrownum).getValues();
data = data.concat(values)
}
Logger.log(data);
return data;
}
推荐阅读
- javascript - 使用 javascript 为动态功能创建架构设计
- javascript - 阻止表情符号插入文本字段
- python - 按钮文本和颜色不会出现在 Tkinter 程序上
- swift - 如何快速删除重复的 VC?
- mongodb - 即使我正在设置它,也会出现 $set 错误?
- symfony - Symfony 4 CollectionType 验证组不工作
- c# - 在asp net中单击不同的单选按钮时如何检查多个复选框?
- python - 如何在字符串中添加值并转到下一个字母?
- c++ - 有没有办法消除这种歧义?
- hyperledger-fabric - 链码输入参数是否存储在区块链中?