Google apps script 检查图纸名称并选择有效的图纸名称

Google apps script 检查图纸名称并选择有效的图纸名称,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我在一个谷歌驱动器中有两个电子表格,每个都有两个表格,我想迭代它们,并在我之前指定的表格中的指定范围内复制特定范围。 我可以遍历这些文件,但我可以对照我的工作表列表检查工作表名称。我将所需工作表列表存储在valid变量中,该变量从电子表格的指定范围读取。我检查了小写/大写,工作表名称有些是字符串,有些是数字。但我的情况并没有影响到任何事情。我尝试了indexOf和includes,知道怎么了吗 var App = SpreadsheetApp; var ss = App.openById("**

我在一个谷歌驱动器中有两个电子表格,每个都有两个表格,我想迭代它们,并在我之前指定的表格中的指定范围内复制特定范围。 我可以遍历这些文件,但我可以对照我的工作表列表检查工作表名称。我将所需工作表列表存储在
valid
变量中,该变量从电子表格的指定范围读取。我检查了小写/大写,工作表名称有些是字符串,有些是数字。但我的情况并没有影响到任何事情。我尝试了
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
   };
 };
var-App=电子表格应用程序;
var ss=App.openById(“**”)//目的地SS
var sh=ss.getSheetByName(“数据”);
var files=DriveApp.getFolderById(“****”).getFiles();
var valid=ss.getRangeByName('ValidNames').getValues();
函数循环(){
while(files.hasNext()){
var f=files.next();
如果(f==ss.getName())继续;
var file=App.openById(f.getId());
var sheets=file.getSheets();
对于(var i=0;i-1)sh.appendRow([Date.now(),f,s]);//不工作
};
};
谢谢,
M

如果只有一列,您可以使用以下内容:

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
    }
  }
}
函数myFunction(){
var ss=SpreadsheetApp.openById('ssid');//目的地ss
var sh=ss.getSheetByName(“数据”);
var files=DriveApp.getFolderById(“**”).getFilesByType(MimeType.GOOGLE_SHEETS);//包含的MimeType
var valid=ss.getRangeByName('ValidNames').getValues().map(函数(r){return r[0]});
while(files.hasNext()){
var f=files.next();
如果(f==ss.getName())继续;
var file=SpreadsheetApp.openById(f.getId());
var sheets=file.getSheets();
对于(var i=0;i-1)sh.appendRow([Date.now(),f,s]);//不工作
}
}
}

我还删除了函数循环,因为它对我来说毫无意义。

你的工作表列表在哪里?我编辑了我的问题。我将它们存储在Valid变量中,该变量从我的ssValid中读取,它是一个二维数组。即使只有一列,也需要将其展平以使用indexOf()。尝试映射方法。还有一个问题,你们知道为什么我不能对工作表上的每个循环进行映射吗?我有
varx;对于(工作表中的x){var s=x.getName();}
但无法从x!获取名称!。我做错什么了吗?!我没有看到for循环。一般来说,它没有通过,所以我把它改为for(I)循环。