Copiare il contenuto di un file in un altro mantenendo lo stesso id
Sovrascrivere il contenuto di un file su Drive con Google Apps Script
Potrebbe sembrare un'operazione poco utile quella di mantenere lo stesso file sovrascrivendone il solo contenuto, ovvero senza eliminarlo fisicamente da Google Drive creandolo ex-novo o senza creare una copia del file di origine. Ci sono tuttavia situazioni dove, a maggior ragione nella generazione di automatismi, applicare questa logica può essere utile se non indispensabile.
Un esempio di reale applicazione potrebbe essere quello di un file collegato come sorgente dati ad uno strumento di analisi.
In quel caso il tool crea una connessione con il file in questione riferendosi ad esso in modo univoco tramite l'id del file ed altri suoi metadati. Se, per un aggiornamento della sorgente dati, il file venisse eliminato e ricreato, se pur con lo stesso nome, il collegamento tra esso ed lo strumento esterno verrebbe a mancare invalidandone l'uso.
Salvando il file su Google Drive è possibile, grazie a Google Apps Script, ovviare a questo inconveniente.
La funzione riportata nel seguente codice permette infatti, dato un file di origine ed uno di destinazione (nel caso specifico un normalissimo file Microsoft Excel, quindi non necessariamente un file di Google), di recuperare il contenuto da un file e sovrascriverlo a quello di un altro, mantenendo intatto l'id del file di destinazione così come tutti i suoi metadati:
var folder_id = '1Y1jz206q9f07owz1...'; // id della cartella su Drive dove si trovano i file da gestire
var file_start_name = 'file_sorgente.xlsx'; // esempio, con id: 1cSMfDTGJiJRrH7Oq...
var file_end_name = 'file_destinazione.xlsx'; // esempio, con id: 1VMbOZqdnQNZ7B5nYp...
var file_start_id = '';
var file_end_id = '';
var file_current = ''
var file_destination = '';
function overwriteFileContent() {
var folder = DriveApp.getFolderById(folder_id);
var files = folder.getFiles();
while (files.hasNext()) {
file = files.next();
if (file.getName() == file_start_name) {
file_start_id = file.getId();
file_current = file;
}
if (file.getName() == file_end_name) {
file_end_id = file.getId();
file_destination = file;
}
}
var bln_file_current = file_current ? true : false;
var bln_file_destination = file_destination ? true : false;
if (bln_file_current && bln_file_destination) {
Drive.Files.update({ title: file_destination.getName(), mimeType: file_destination.getMimeType() }, file_destination.getId(), file_current.getAs(file_current.getMimeType()).copyBlob());
}
Logger.log(file_start_id + ' - ' + file_end_id);
}
Il contenuto del file di destinazione, a fine operazione, sarà identico a quello utilizzato come sorgente. Nel log inoltre verrà mostrato che il file di destinazione ha mantenuto lo stesso id che aveva ad inizio processo, a conferma del fatto che non ha subito alterazioni a livello strutturale ma solo di contenuto.
Non ci sono commenti
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
scrivi un commento