簡體   English   中英

如何在Google Apps腳本中使用Gsheet文件的名稱獲取ID

[英]How to I get the ID of a Gsheet file by using its name in google apps script

我正在拔頭發。 我有以下代碼,並且一直試圖找出如何使用其名稱獲取gsheet文件的ID。 我的目標是按文件名查找文件,然后獲取ID,然后從該文件中獲取一個范圍並將其輸出到活動工作表中

 function onOpen() { var ui = SpreadsheetApp.getUi(); // Or DocumentApp or FormApp. ui.createMenu('Master Analysis Functions') .addItem('Update Sheet', 'updateSheet') .addSeparator() .addSubMenu(ui.createMenu('Test Menu') .addItem('Test Function', 'menuItem2')) .addToUi(); } function updateSheet() { /* Top Level Google Drive Folder ID & General Settings */ var TopDrivefolderId = "0B2rN5b8fW77ldXZXOXFLZGlSamc"; var BaseNumberOfFilesInFolder = 5; var filesInFolderBeforeTemplate = 4; /* End General Settings */ var parentFolder = DriveApp.getFolderById(TopDrivefolderId); var childFolders = parentFolder.getFolders(); while(childFolders.hasNext()) { var child = childFolders.next(); // Logger.log(child.getName() + " |Drive_ID: " + child.getId()); var folderId = child.getId(); // **the folderId Variable is also the folder ID, // hence they are used interchangeably ** var myFolder = DriveApp.getFolderById(folderId); /* Name of combined Spreadsheet*/ //var tradeName = Drive App.getFolderById(folderId).getName(); var tradeName = DriveApp.getFolderById(folderId).getName(); /* Get all spreadsheets that resided on that folder */ var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet"); var spreadSheetName = myFolder.getName(); /* Check if a file needs to be created or if one already exists*/ var theFolder = DriveApp.getFolderById(folderId); var files = theFolder.getFiles(); var fname = theFolder.getName(); var cnt = 0; var file; /* Check the quantity of files in a folder to see if you need to combine the sheets and create a file*/ while (files.hasNext()) { cnt++; file = files.next(); //Logger.log(file.getName()); if (cnt > BaseNumberOfFilesInFolder) { Logger.log("File already exists") break; } ; }; // If a file needs to be created this checks it and creates it Logger.log(cnt + " is the number of files '"+ tradeName+ "' has."); if (cnt > BaseNumberOfFilesInFolder){ Logger.log("The Data for " +tradeName+ " is already in the sheet.") } else if(cnt == filesInFolderBeforeTemplate){ Logger.log("ERROR: You need to run the template adder script to add the template to " +tradeName) var sheet = SpreadsheetApp.getActiveSheet(); sheet.appendRow(["ERROR: You need to run the template adder script to add the template to " +tradeName]); continue; }else{ /* Create the new spreadsheet to verify this trade is in the master sheet */ var newSpreadSheet = SpreadsheetApp.create("Added to Master"); var spreadSheet = DriveApp.getId(tradeName); Logger.log(spreadSheet); Logger.log(tradeName + " It has been logged"); var sheetCurrent = SpreadsheetApp.getActiveSheet(); //sheetCurrent.appendRow([tradeName,data]); /* In order to move the file to the folder we want and because google considers the SpreadSheet a Google Spreadsheet instead of a file, we have to convert the SpreadSheet to a file in order to move it.Thats what the next 2 lines of code do.*/ var getNewSSid = newSpreadSheet.getId(); var SStoGFile = DriveApp.getFileById(getNewSSid); /* Actually moving the file*/ DriveApp.getFolderById(folderId).addFile(SStoGFile); /* Deleting the duplicate file that was created in the process*/ var rootFolder = DriveApp.getRootFolder(); DriveApp.getRootFolder().removeFile(SStoGFile); } getSubFolders(child); }; SpreadsheetApp.getUi() // Or DocumentApp or FormApp. .alert('All Trades updated! Please check the sheet for errors.'); }; function getSubFolders(parent) { parent = parent.getId(); var childFolder = DriveApp.getFolderById(parent).getFolders(); while(childFolder.hasNext()) { var child = childFolder.next(); Logger.log(child.getName()); getSubFolders(child); } return; } /* End iterate through Sub Folders */ function menuItem2() { var files = DriveApp.searchFiles("tradeName"); Logger.log(files,tradeName); var spreadsheet = SpreadsheetApp.open(tradeName); var sheet = spreadsheet.getSheets()[0]; Logger.log(sheet.getName()); SpreadsheetApp.getUi() // Or DocumentApp or FormApp. .alert('You clicked the second menu item!'); }; 

對於我來說,您的代碼有些混亂,無法真正找到您的問題的確切位置以及您要嘗試解決的問題,但是根據您自己的問題,您需要做的是

fileList = DriveApp.getFilesByName('This_name')
while (fileList.hasNext()) {
  Logger.log(fileList.next().getId())
}

這將記錄與該名稱匹配的每個文件ID。 電子表格服務只能通過ID打開,因此您需要使用驅動器服務(我的意思是google-spreadsheet標記在此處並不適合,因為這只能作為驅動器處理)。

如果要通過電子表格服務獲取文件,則始終可以執行SpreadsheetApp.open(fileList.next())以直接從文件對象中打開文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM