从工作表创建文件

从工作表创建文件

问题描述:

我希望Apps脚本根据工作表中的姓名创建新的电子表格。举例来说,如果我的名字(在第7栏)的名单分别为:从工作表创建文件

我想脚本通过此列表迭代,只有名称替换字符串(减去电子邮件域)搜索驱动器f或与名称匹配的现有文件。 另外,如果存在现有文件,则不执行任何操作,否则请创建一个名称为工作表的工作表。

我在下面的代码似乎遍历列表并替换字符串,但最后两个步骤有问题。 它会看到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); 
    } 

试试这个。我没有测试过,但我认为它会让你接近。

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; 
} 
+0

感谢您的库珀循环for开始。我会尽快尝试。我首先想在脑海中仔细检查一下,找出方法。再次感谢。 – LeoSaumure

的JavaScript指数开始0,但在1

+0

1是由设计。这是删除列标题的简单方法。 – LeoSaumure