JavaScript, HTML, CSS e... !
0 commenti

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.

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

scrivi un commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]https://www.appsscript.it[/url] se devi riferirti ad un indirizzo web