Como importar automaticamente dados do arquivo CSV ou XLS enviado para o Planilhas Google

Eu tenho um sistema de database legado (não acessível pela web) em um servidor que gera relatórios CSV ou XLS para uma pasta do Google Drive. Atualmente, estou abrindo manualmente esses arquivos na interface da Web do Google Drive e convertendo-os para o Planilhas Google.

Eu preferiria que isso fosse automático para que eu pudesse criar trabalhos que acrescentassem / transformassem e representassem graficamente os dados em outras planilhas.

É possível produzir um arquivo .gsheet nativo? Ou existe uma maneira de converter CSV ou XLS para .segmentação programaticamente depois de salvá-lo no Google Drive no Google Apps ou através de um script / utilitário baseado no Windows?

    Você pode importar dados programaticamente de um arquivo csv em seu Google Drive para uma planilha do Google existente usando o Script do Google Apps, substituindo / anexando dados conforme necessário.

    Abaixo está um código de exemplo. Ele pressupõe que: a) você tem uma pasta designada em seu Drive na qual o arquivo CSV é salvo / enviado para; b) o arquivo CSV é denominado “report.csv” e os dados nele delimitados por vírgulas; e c) os dados CSV são importados para uma planilha designada. Veja os comentários no código para mais detalhes.

    function importData() { var fSource = DriveApp.getFolderById(reports_folder_id); // reports_folder_id = id of folder where csv reports are saved var fi = fSource.getFilesByName('report.csv'); // latest report file var ss = SpreadsheetApp.openById(data_sheet_id); // data_sheet_id = id of spreadsheet that holds the data to be updated with new report data if ( fi.hasNext() ) { // proceed if "report.csv" file exists in the reports folder var file = fi.next(); var csv = file.getBlob().getDataAsString(); var csvData = CSVToArray(csv); // see below for CSVToArray function var newsheet = ss.insertSheet('NEWDATA'); // create a 'NEWDATA' sheet to store imported data // loop through csv data array and insert (append) as rows into 'NEWDATA' sheet for ( var i=0, lenCsv=csvData.length; i 

    Você pode então criar um gatilho acionado pelo tempo no seu projeto de script para executar a function importData() regularmente (por exemplo, todas as noites às 1:00), então tudo que você precisa fazer é colocar o novo arquivo report.csv na pasta Drive designada e ele será processado automaticamente na próxima execução agendada.

    Se você absolutamente DEVE trabalhar com arquivos do Excel em vez de CSV, então você pode usar este código abaixo. Para que funcione, você deve ativar a API do Google Drive nos Serviços avançados do Google em seu script e no Developers Console (consulte Como ativar serviços avançados para obter detalhes).

     /** * Convert Excel file to Sheets * @param {Blob} excelFile The Excel file blob data; Required * @param {String} filename File name on uploading drive; Required * @param {Array} arrParents Array of folder ids to put converted file in; Optional, will default to Drive root folder * @return {Spreadsheet} Converted Google Spreadsheet instance **/ function convertExcel2Sheets(excelFile, filename, arrParents) { var parents = arrParents || []; // check if optional arrParents argument was provided, default to empty array if not if ( !parents.isArray ) parents = []; // make sure parents is an array, reset to empty array if not // Parameters for Drive API Simple Upload request (see https://developers.google.com/drive/web/manage-uploads#simple) var uploadParams = { method:'post', contentType: 'application/vnd.ms-excel', // works for both .xls and .xlsx files contentLength: excelFile.getBytes().length, headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}, payload: excelFile.getBytes() }; // Upload file to Drive root folder and convert to Sheets var uploadResponse = UrlFetchApp.fetch('https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true', uploadParams); // Parse upload&convert response data (need this to be able to get id of converted sheet) var fileDataResponse = JSON.parse(uploadResponse.getContentText()); // Create payload (body) data for updating converted file's name and parent folder(s) var payloadData = { title: filename, parents: [] }; if ( parents.length ) { // Add provided parent folder(s) id(s) to payloadData, if any for ( var i=0; i 

    O código acima também está disponível como uma essência aqui .

    Você pode fazer com que o Google Drive converta automaticamente os arquivos csv no Planilhas Google, acrescentando

     ?convert=true 

    até o final da api url que você está chamando.

    EDIT: aqui está a documentação sobre os parâmetros disponíveis: https://developers.google.com/drive/v2/reference/files/insert

    Além disso, enquanto procurava o link acima, descobri que esta pergunta já foi respondida aqui:

    Carregar o CSV para a Planilha do Google Drive usando a API do Drive v2

    (Mar de 2017) A resposta aceita não é a melhor solução. Ele depende da tradução manual usando o Apps Script, e o código pode não ser resiliente, exigindo manutenção. Se o seu sistema legado gera automaticamente arquivos CSV, é melhor que eles entrem em outra pasta para processamento temporário (importando [fazendo o upload para o Google Drive e convertendo] para arquivos do Planilhas Google).

    Meu pensamento é deixar a API do Google Drive fazer todo o trabalho pesado. A equipe da API do Google Drive lançou a v3 no final de 2015 e, nessa versão, insert() alterou os nomes para create() para refletir melhor a operação do arquivo. Também não há mais sinalizador de conversão – você acabou de especificar MIMEtipos … imagine isso!

    A documentação também foi aprimorada: agora há um guia especial dedicado a uploads (simples, multipartes e de retorno) que vem com código de amostra em Java, Python, PHP, C # / .net, Ruby, JavaScript / Node.js e iOS / Obj-C que importa arquivos CSV para o formato Planilhas Google conforme desejado.

    Abaixo está uma solução Python alternativa para arquivos curtos (“upload simples”) onde você não precisa da class apiclient.http.MediaFileUpload . Este snippet pressupõe que seu código de autorização funciona onde seu ponto de extremidade de serviço é DRIVE com um escopo de autorização mínimo de https://www.googleapis.com/auth/drive.file .

     # filenames & MIMEtypes DST_FILENAME = 'inventory' SRC_FILENAME = DST_FILENAME + '.csv' SHT_MIMETYPE = 'application/vnd.google-apps.spreadsheet' CSV_MIMETYPE = 'text/csv' # Import CSV file to Google Drive as a Google Sheets file METADATA = {'name': DST_FILENAME, 'mimeType': SHT_MIMETYPE} rsp = DRIVE.files().create(body=METADATA, media_body=SRC_FILENAME).execute() if rsp: print('Imported %r to %r (as %s)' % (SRC_FILENAME, DST_FILENAME, rsp['mimeType'])) 

    Melhor ainda, em vez de enviar para o My Drive , você faria o upload para uma (ou mais) pasta (s) específica (s), o que significa que você adicionaria os IDs das pastas pai a METADATA . (Veja também o exemplo de código nesta página .) Finalmente, não há “arquivo” .gsheet nativo – esse arquivo tem apenas um link para a Planilha on-line, então o que está acima é o que você deseja fazer.

    Se não estiver usando o Python, você pode usar o snippet acima como pseudocódigo para portar para o seu idioma do sistema. Independentemente disso, há muito menos código para manter, porque não há análise de CSV. A única coisa que resta é apagar a pasta temporária do arquivo CSV gravada em seu sistema legado.