2017-04-05 44 views
0

我希望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); 
    } 

回答

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

感謝您的庫珀循環for開始。我會盡快嘗試。我首先想在腦海中仔細檢查一下,找出方法。再次感謝。 – LeoSaumure

0

的JavaScript指數開始0,但在1

+0

1是由設計。這是刪除列標題的簡單方法。 – LeoSaumure