Da Google Spreadsheet a Microsoft Excel nella tua casella di posta
Convertire un Google Spreadsheet in un file Microsoft Excel
In un altro articolo ho mostrato come sia possibile convertire un documento di Microsoft Excel in un Google Spreadsheet per trovarlo pronto all'uso nel proprio Google Drive.
Tuttavia anche la conversione inversa, ovvero da Google Spreadsheet a file Microsoft Excel può essere altrettanto utile nonché necessaria qualora si volesse esportare i documenti di Google su un disco fisso o inviarli via email ad un collaboratore senza condividere il file originale.
Il codice seguente consente, specificando l'ID di un Foglio di Google, di convertirlo in file Excel ed inviarlo come allegato di una email all'indirizzo di posta desiderato:
function getGoogleSpreadsheetAsExcel() {
try {
var ss_id = "1X4LzOKp-ZXsxMRNWm30..."; // ID dello Spreadsheet
var email_to = "destinatario@mail.it";
var email_subj = "Excel convertito da Spreadsheet";
var email_text = "Il file Excel si trova in allegato";
ss = SpreadsheetApp.openById(ss_id);
var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss_id + "&exportFormat=xlsx";
var params = {
method : "get",
headers : { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
muteHttpExceptions: true
};
var blob = UrlFetchApp.fetch(url, params).getBlob();
blob.setName(ss.getName() + ".xlsx");
MailApp.sendEmail(email_to, email_subj, email_text, { attachments: [blob]} );
} catch (f) {
Logger.log(f.toString());
}
}
Le variabili di configurazione consentono di definire oltre all'identificativo del file da convertire anche la mail del destinatario, l'oggetto della mail ed il testo.
L'uso del costrutto try...catch consente di gestire eventuali eccezioni.
Da precisare che la funzione di cui sopra non necessita dell'abilitazione delle Drive API per eseguire l'operazione.
Adattando il codice alle proprie esigenze è possibile creare strumenti molto utili e automatizzati, ad esempio per processare tutti gli Spreadsheet presenti in una particolare cartella ed inviarli via mail convertiti in Excel oppure crearsi giornalmente un archivio o un backup su Google Drive di Fogli di Google convertiti in Excel per mantenere lo storico delle attività quotidiane.
Puoi trovare molte altre informazioni sulla gestione degli Spreadsheet da Apps Script nel mio libro "Punta in alto con... Google Apps Script":
ACQUISTA ORA IL LIBRO SU AMAZON:
Se sei pronto a diventare un esperto nella programmazione in Google Apps Script non posso fare altro che augurarti una buona lettura e soprattutto... Buon divertimento!
La variabile "ss_id" definisce l'url del foglio google e trasforma l'intero file in xlsx, ma se invece a me interessa copiare una sola subcartella del foglio google invece che tutti i folder presenti in esso? Cioè, se il foglio google è costituito da enne cartelle, posso estrarne una soltanto e creare il file excel con quella soltanto? Grazie!
...ho risolto in questa maniera forse poco ortodossa ma funzionale a ciò che mi occorreva: il mio obiettivo era di esportare da un foglio google costituito da molte cartelle, una sola di queste; quindi piuttosto che esportare come xlsx ho esportato come csv. Il file .csv esportato contiene solo la prima cartella di un foglio google e quindi ho posizionato a sinistra la cartella che mi interessava e la tua procedura, con questo piccolo artificio, esporta ciò che volevo esportare, Certo sarebbe interessante per me sapere come esportare anche in xslx una sola cartella. :-) anche se l'obiettivo che mi ero posto è stato raggiunto. Grazie per questo script.
Ciao Pippo,
grazie per aver condiviso la tua soluzione!
Non conosco metodi diretti per poter ottenere quello di cui hai bisogno, un'alternativa che mi viene in mente potrebbe essere quella di creare uno script che effettua dinamicamente i seguenti passaggi: crea una copia del file, elimina i fogli (le cartelle) indesiderate, converte in Excel ed elimina la copia del file da Drive.
In questo modo il file originale non viene alterato, e su Google Drive hai un file in Excel pulito.
Un altro script che mi ha fatto risparmiare ore di snervante lavoro.
Immagino che il procedimento funzioni anche per i google docs, oppure per inviare allegati di diverso tipo.
Grazie.