【问题标题】:Checking sheet names and selects the valid sheet names检查工作表名称并选择有效的工作表名称
【发布时间】:2019-05-16 19:36:54
【问题描述】:

我在谷歌驱动器中有几个电子表格,每个都有几个工作表,我想遍历它们并在我之前指定的工作表中复制特定范围。 我可以遍历文件,但我可以对照我的工作表列表检查工作表名称。我将所需工作表的列表存储在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

【问题讨论】:

  • 您的工作表列表在哪里?
  • 我编辑了我的问题。我将它们存储在 Valid 变量中,该变量是从我的 ss 读取的
  • 有效的是一个二维数组。即使它只有一列,您仍然需要将其展平以使用 indexOf()。试试map方法。

标签: google-apps-script google-sheets


【解决方案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
    }
  }
}

我还删除了那个函数循环的东西,它对我来说毫无意义。

【讨论】:

  • 还有一个问题,你知道为什么我不能为床单上的每个循环都做吗?我有var x; for (x in sheets) { var s = x.getName();},但无法从 X! 中获得名称。我是不是做错了什么?!
  • 我没有看到 for 循环。
  • 一般来说没有通过,所以我把它改成了 for (i) 循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多