2017-12-01 1 views
2

3つのSpreadSheetsを1つに保存しようとしています。このためには、3つのファイルが存在するかどうかをチェックする必要があります。しかし、私のコードは動作していません:Google SpreadSheet Script - ファイル数を確認してください

function mergeSheets() { 
    var myFolder = DriveApp.getFoldersByName('myFolder').next(); 
    var spreadSheets = myFolder.getFiles(); 
    var file1 = "myfile1.xlsx"; 
    var file2 = "myfile2.xlsx"; 
    var file3 = "myfile3.xlsx"; 

    while(spreadSheets.hasNext()) { 
     var sheet = spreadSheets.next(); 

     if ((sheet.getName()==file1) && (sheet.getName()==file2) && 
     (sheet.getName()==file3)) { 

     var newSpreadSheet = SpreadsheetApp.create("myList");  
     var spreadSheet = SpreadsheetApp.openById(sheet.getId()); 

     for(var y in spreadSheet.getSheets()) {  
      spreadSheet.getSheets()[y].copyTo(newSpreadSheet); 
     } 

     // Rename sheets with string "Copy of fileX" to "fileX" 
     if (newSpreadSheet.getSheetByName('Kopie von file1') == true){ 
      newSpreadSheet.getSheetByName('Kopie von file1').setName('file1') 
     } 

     if (newSpreadSheet.getSheetByName('Kopie von file2') == true){ 
      newSpreadSheet.getSheetByName('Kopie von file2').setName('file2') 
     } 

     if (newSpreadSheet.getSheetByName('Kopie file3') == true){ 
      newSpreadSheet.getSheetByName('Kopie von file3').setName('file3') 
     } 

     // Delete standard sheet if create a new spreadsheet 
     newSpreadSheet 
      .deleteSheet(newSpreadSheet.getSheetByName('Tabellenblatt1')) 

     var file = DriveApp.getFileById(newSpreadSheet.getId()) 
     var folder = DriveApp.getFoldersByName('myFolder').next(); 
     var newFile = folder.addFile(file); 
     DriveApp.getRootFolder().removeFile(file); 
    } 
    } 
} 

私はこれがなぜ機能していないのかわかりません。私がオンラインで1つのファイルをif-statementにAND-operatorなしで使用すると動作しますが、これは問題ではないと思います。

答えて

1

3つのファイルをすべて明示的に取得できます。他のファイルはすべて除外します。 search()メソッドを使用します

function mergeSheets() { 
    var myFolder = DriveApp.getFoldersByName('myFolder').next(); 
    var spreadSheets,thisFile; 

    var file1 = "myfile1.xlsx"; 
    var file2 = "myfile2.xlsx"; 
    var file3 = "myfile3.xlsx"; 

    spreadSheets = myFolder.searchFiles('title contains "' + file1 + 
       '" or title contains "' + file2 + 
       '" or title contains "' + file3 + '"'); 

    while(spreadSheets.hasNext()) { 
    thisFile = spreadSheets.next(); 

    Logger.log('name: ' + thisFile.getName()) 

    } 

} 

をしかし、私はファイルの配列を取得し、それらをループする最善の戦略であるとは思いません。ファイル数が常に3で、正確なファイル名がわかっている場合は、各ファイルを個別に取得することをお勧めします。

var myFolder = DriveApp.getFoldersByName('myFolder').next(); 

var file1 = myFolder.getFilesByName("myfile1.xlsx").next(); 
var file2 = myFolder.getFilesByName("myfile2.xlsx").next(); 
var file3 = myFolder.getFilesByName("myfile3.xlsx").next(); 
+0

ところで、アクティブシートとは何ですか?閉じたファイルでトリガーを使用しているときに意味がありますか?私のアクティブシートはフィルタ機能付きのシートですか? – TigerClaw

+0

コードがスタンドアロンのAppsスクリプトファイルにある場合、アクティブなシートはありません。これは、Appsスクリプトプロジェクトがドキュメント(フォーム、シート、ドキュメント)にバインドされている場合にのみ機能します。この場合、スプレッドシートファイルをIDで取得する必要があります。 –

関連する問題