我在Google驱动器中有几个电子表格,每个电子表格都有几张工作表,我想遍历这些工作表并将特定范围复制到我之前指定的工作表中的命名范围内。
我可以遍历文件,但可以对照我的工作表列表检查工作表名称。我将所需工作表的列表存储在valid
变量中,该变量从电子表格的命名范围读取。我检查了小写/大写,工作表名称有些是字符串,有些是数字。但是我的if条件什么也没抓住。我同时尝试了indexOf
和includes
,知道什么地方出错了吗?
var App = SpreadsheetApp;
var ss = App.openById("****"); //Destination SS
var sh = ss.getSheetByName("Data");
var files = DriveApp.getFolderById("****").getFiles();
var valid = ss.getRangeByName('ValidNames').getValues();
function Loop() {
while (files.hasNext()){
var f = files.next();
if (f == ss.getName()) continue;
var file = App.openById(f.getId());
var sheets = file.getSheets();
for (var i=0 ; i<sheets.length ; i++) {
var s= sheets[i].getName().toUpperCase();
if (valid.includes(s)) sh.appendRow([Date.now(),f, s ]); // Not working? Shows Error
if (valid.indexOf(s)> -1) sh.appendRow([Date.now(),f, s ]); // Not Working
};
};
谢谢, M
答案 0 :(得分:1)
如果只有一列,则可以使用以下内容:
var valid = ss.getRangeByName('ValidNames').getValues().map(function(r){return r[0]});
这就是我的功能:
function myFunction() {
var ss = SpreadsheetApp.openById('ssid'); //Destination SS
var sh = ss.getSheetByName("Data");
var files = DriveApp.getFolderById("****").getFilesByType(MimeType.GOOGLE_SHEETS);//included mimetype
var valid = ss.getRangeByName('ValidNames').getValues().map(function(r){return r[0]});
while (files.hasNext()){
var f=files.next();
if (f==ss.getName())continue;
var file=SpreadsheetApp.openById(f.getId());
var sheets = file.getSheets();
for (var i=0;i<sheets.length;i++) {
var s= sheets[i].getName().toUpperCase();
if (valid.indexOf(s)>-1)sh.appendRow([Date.now(),f, s ]); // Not Working
}
}
}
我还删除了该函数循环的内容,这对我来说也没有意义。