Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌电子表格脚本-检查文件数_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 谷歌电子表格脚本-检查文件数

Javascript 谷歌电子表格脚本-检查文件数,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在尝试将3张电子表格保存到一张。为此,我必须检查3个文件是否存在。但我的代码不起作用: function mergeSheets() { var myFolder = DriveApp.getFoldersByName('myFolder').next(); var spreadSheets = myFolder.getFiles(); var file1 = "myfile1.xlsx"; var file2 = "myfile2.xlsx";

我正在尝试将3张电子表格保存到一张。为此,我必须检查3个文件是否存在。但我的代码不起作用:

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);
    }
  }
}

我不知道这为什么不起作用。如果我在没有AND运算符的情况下对If语句使用在线一个文件,它可以工作,但我认为这不是问题。

您可以显式获取所有三个文件,排除所有其他文件。使用
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();

顺便问一下,活动工作表是什么意思?这是否意味着当我使用关闭文件的触发器时?“我的活动工作表”是否是具有filterfunction的工作表?如果代码位于独立的应用程序脚本文件中,则没有活动工作表。这仅在应用程序脚本项目绑定到文档(表单、工作表、文档)时有效。在这种情况下,您需要按ID获取电子表格文件。