Estoy ejecutando este código en Google Apps Script para guardar una copia de un archivo (foto) en una carpeta específica, desde un enlace URL extraído de una hoja de Google. Las fotos están en cuentas de google drive de otras personas..
Esta hoja de Google proviene del formulario ODK que diferentes personas completan durante las encuestas de trabajo de campo, y necesito centralizar todos los datos en mi Gdrive.
Las URL están en la columna L de esta hoja de cálculo https://docs.google.com/spreadsheets/d/14vtEHDxxNc0d4yEn4T0gZcEyePJeJgw6NqQ9ajmn1fo/view#gid=0
El ID de la carpeta en la que intento guardar los archivos es: "1ImYcc_HqFZjpCUj4BHprhu3HSXKNQS0E"
Ejecuto mi código pero no pasa nada. (He activado la API)
Soy nuevo en la codificación, así que estoy muy perdido.
var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheetName = "Sheet1"; var sh = ss.getSheetByName(sheetName); var rangeA1 = "L6:L68"; var rg=sh.getRange(rangeA1); var formulas = rg.getFormulas(); for (var i in formulas) { for (var j in formulas[i]) { var formula = formulas[i][j]; if (formula.length !=0){ var regex = /=\w+\((.*)\)/i; var matches = formula.match(regex); var imgurl = matches[1]; var filename = imgurl.substring(imgurl.lastIndexOf("/") + 1, imgurl.lastIndexOf("")); Logger.log(filename); var image = UrlFetchApp.fetch(imgurl).getBlob().getAs('image/jpg').setName(filename); var folder = DriveApp.getFolderById("1ImYcc_HqFZjpCUj4BHprhu3HSXKNQS0E"); var file = DriveApp.createFile(image); Drive.Files.update({"parents": [{"id": folder.getId()}]}, file.getId()); } } } }```Hazme saber si esto funciona para ti:
SpreadsheetApp.getActiveSpreadsheet() .getSheetByName(`Sheet1`) .getRange(`L6:L68`) .getDisplayValues() .flat() .filter(String) .forEach(url => { const targetFile = url.slice(url.indexOf(`id=`)+3) try { DriveApp.getFileById(targetFile) .makeCopy() .moveTo(`1ImYcc_HqFZjpCUj4BHprhu3HSXKNQS0E`) //.setName("") } catch (e) { Logger.log(`Unauthorized Access: [${targetFile}]`)} }) function lfunko() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName("Sheet1"); const vs = sh.getRange(2,1,sh.getLastRow() - 1,sh.getLastColumn()).getDisplayValues().filter(r => r[11]); const folder = DriveApp.getFolderById("1ImYcc_HqFZjpCUj4BHprhu3HSXKNQS0E"); vs.forEach(r => { let m = r[11].toString().match(/^[^=]+=([0-9A-Za-z_-]+)$/g); if (m) { let f = DriveApp.getFileById(m[1]); let c = f.makeCopy(f.getName()); Drive.Files.update({"parents": [{"id": folder.getId()}]}, c.getId()); } }) }