Necesito poder tomar todos los archivos de una carpeta dentro de la unidad e ingresar los datos en la hoja de cálculo. También estoy creando una pestaña de menú para poder ejecutar el script sin tener que ir al editor. Sería genial si pudiera crear una forma de ingresar nombres de carpetas existentes sin tener que ir siempre al script para realizar ese paso adicional. Este es el script que estoy usando. Realmente necesito ayuda con esto.
function importTimesheets() { var spreadsheets = DriveApp. getFolderById(""). getFilesByType(MimeType.GOOGLE_SHEETS); var data = []; while (spreadsheets.hasNext()) { var currentSpreadsheet = SpreadsheetApp.openById(spreadsheets.next().getId()); data = data.concat(currentSpreadsheet .getSheetByName('Timesheet') .getRange("A3:L10") .getValues() ); } SpreadsheetApp. getActiveSheet(). getRange(1, 1, data.length, data[0].length). setValues(data); } function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Generate Timesheets') .addItem('Generate', 'importTimesheets')Según tengo entendido, está tratando de encontrar una solución para esta línea de código, por lo que actualmente debe ingresar la identificación manualmente.
DriveApp.getFolderById("")Mi sugerencia sería solicitar al usuario la identificación de la carpeta, ya que solicitar el nombre de la carpeta puede causar errores si más de una carpeta tiene el mismo nombre. Mi sugerencia se implementa de la siguiente manera:
const folderId = SpreadsheetApp.getUi().prompt("Please enter the Folder Id").getResponseText() const folder = DriveApp.getFolderById(folderId)También puede usar el selector de archivos/carpetas de Google, como se describe aquí , para buscar y seleccionar la carpeta.
Prueba esto:
var level=0; function getFnF(folder = DriveApp.getRootFolder()) { const ss=SpreadsheetApp.getActive(); const sh=ss.getSheetByName('Sheet1') const files=folder.getFilesByType(MimeType.GOOGLE_SHEETS); while(files.hasNext()) { let file=files.next(); let firg=sh.getRange(sh.getLastRow() + 1,level + 1); firg.setValue(Utilities.formatString('File: %s', file.getName()));//need editing } const subfolders=folder.getFolders() while(subfolders.hasNext()) { let subfolder=subfolders.next(); let forg=sh.getRange(sh.getLastRow() + 1,level + 1); forg.setValue(Utilities.formatString('Fldr: %s', subfolder.getName()));//needs editing level++; getFnF(subfolder); } level--; } function runThisFirst() { let r = SpreadsheetApp.getUi().prompt('Folder id','Enter Folder Id',SpreadsheetApp.getUi().ButtonSet.OK); let folder = DriveApp.getFolderById(r.getResponseText()) getFnF(folder); }