从工作表创建文件

时间:2017-04-05 23:22:58

标签: google-apps-script google-sheets

我希望让Apps脚本根据工作表中的名称创建新的电子表格。例如,如果我的名单(第7栏)是:

  • Bender@interpret.org.nz
  • Fry@interpret.org.nz
  • Hermes@interpret.org.nz
  • Leela@interpret.org.nz
  • Nibbler@interpret.org.nz

我希望脚本遍历此列表,仅使用名称(减去电子邮件域)替换字符串,在驱动器中搜索与名称匹配的现有文件。 此外,如果存在现有文件,则不执行任何操作,否则创建具有名称的工作表。

下面的代码似乎是遍历列表并替换字符串,但最后两个步骤存在问题。 它会看到Bender不存在,它会创建一个Bender文件,但是当它遍历列表时会创建额外的Bender文件,并且不会创建其他丢失的文件。

任何帮助都将不胜感激。

function findExistingSheets() {
      var sheet = SpreadsheetApp.openById('SpreadSheetKey').getSheetByName('ISheetName');
      var data = sheet.getDataRange().getValues();
      var files = DriveApp.getFolderById("FileKeyID").getFiles();
        for (var i = 1; i < data.length; i++) {
          var searchFor = data[i][7].replace("@interpret.org.nz","");
            while (files.hasNext()) {
              var file = files.next();
              if(searchFor == file.getName()){
                //Don't do anything
              }
              else {
                //Create speadsheet file with the matchfile name.
                var newFile = SpreadsheetApp.create(searchFor);
              }
            }
        }
      Logger.log(searchFor);
    }

2 个答案:

答案 0 :(得分:0)

试试这个。我还没有对它进行测试,但我认为它会让你接近。

function findExistingSheets() {
      var sheet = SpreadsheetApp.openById('SpreadSheetKey').getSheetByName('ISheetName');
      var data = sheet.getDataRange().getValues();

      var titles = [];
      for (var i = 1; i < data.length; i++) 
      {
        titles.push(data[i][7].replace("@interpret.org.nz",""));
      }    
      var files = DriveApp.getFolderById("FileKeyID").getFiles();  
      while (files.hasNext()) 
      {
          var file = files.next();
          var idx = idxOf(titles,file.getName());
          if(idx>-1)
          {
            var newFile = SpreadsheetApp.create(titles[idx]);
          }
      }
    }

function idxOf(array, x)
{
  for(var i = 0;i < array.length;i++)
  {
    if(array[i]==x)
    {
      return i;
     }
  }
  return -1;
}

答案 1 :(得分:0)

JavaScript索引从0开始,但for循环从1开始。