Javascript 谷歌电子表格脚本-检查文件数
我正在尝试将3张电子表格保存到一张。为此,我必须检查3个文件是否存在。但我的代码不起作用: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";
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获取电子表格文件。