Neste artigo, você aprenderá como exportar dados do Excel para o Planilhas Google programaticamente em Python.

Exportar arquivos do Excel para o Google Sheets em Python

Os arquivos Excel são amplamente utilizados para armazenar os dados e realizar diversos tipos de operações neles, como geração de gráficos, aplicação de fórmulas. Por outro lado, o Google Sheets é um aplicativo online popular para criar e manipular planilhas. O Planilhas Google também oferece compartilhamento em tempo real de planilhas com várias pessoas. Em alguns casos, pode ser necessário exportar arquivos XLS ou XLSX do Excel para o Planilhas Google programaticamente. Para conseguir isso, este artigo fornece um guia completo sobre como configurar um projeto do Google e exportar dados de arquivos do Excel para o Planilhas Google em Python.

Pré-requisitos - Exportar dados do Excel para o Planilhas Google em Python

Projeto Google Cloud

Para nos comunicarmos com o Planilhas Google, teremos que criar um projeto no Google Cloud e ativar a API do Planilhas Google. Além disso, precisamos criar credenciais que são usadas para autorizar as ações que vamos realizar com nosso código. Você pode ler as diretrizes sobre como criar um projeto do Google Cloud e ativar a API do Planilhas Google.

Depois de criar o projeto do Google Cloud e ativar a API do Google Sheets, podemos prosseguir com a instalação das seguintes APIs em nosso aplicativo Python.

Bibliotecas Python para exportar arquivos do Excel para o Planilhas Google

Para exportar dados de arquivos XLS/XLSX do Excel para o Planilhas Google, precisaremos das seguintes APIs.

Exportar dados do Excel para o Planilhas Google em Python

Veja a seguir o guia passo a passo sobre como ler dados de um arquivo XLSX do Excel e gravá-los no Planilhas Google em um aplicativo Python.

  1. Crie um novo aplicativo Python.

  2. Instale as bibliotecas cliente Aspose.Cells e Google no projeto.

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. Coloque o arquivo JSON (que baixamos após criar as credenciais no Google Cloud) no diretório do projeto.

  2. Escreva um método chamado createpreadsheet que cria uma nova planilha no Planilhas Google, define o nome da planilha padrão e retorna o ID da planilha.

def create_spreadsheet(_service, _title, _sheetName):   
    # Detalhes da planilha
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Criar planilha
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    print('Spreadsheet ID: {0}'.format(spreadsheet.get('spreadsheetId')))
    print('Spreadsheet URL: "https://docs.google.com/spreadsheets/d/{0}'.format(spreadsheet.get('spreadsheetId')))
    
    # Abrir no navegador da web
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')
  1. Escreva outro método chamado addsheet para adicionar uma nova planilha na planilha do Google.
def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # Executar solicitação
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. Agora, inicialize o serviço do Planilhas Google usando as credenciais (arquivo JSON) e defina os escopos do aplicativo. O parâmetro scopes é usado para especificar as permissões de acesso ao Planilhas Google e suas propriedades.
# Se estiver modificando esses escopos, exclua o arquivo token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
# O arquivo token.json armazena os tokens de acesso e atualização do usuário e é
# criado automaticamente quando o fluxo de autorização é concluído pela primeira
# Tempo.
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# Se não houver credenciais (válidas) disponíveis, deixe o usuário fazer login.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            'credentials1.json', SCOPES)
        creds = flow.run_local_server(port=0)
    # Salve as credenciais para a próxima execução
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

    service = build('sheets', 'v4', credentials=creds)
  1. Em seguida, carregue o arquivo Excel XLS ou XLSX usando Aspose.Cells e obtenha o nome da primeira planilha na pasta de trabalho.
# Carregar pasta de trabalho do Excel
wb = Workbook(fileName)

# Obter coleção de planilhas
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# Obter pasta de trabalho e nome da primeira planilha
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. Chame o método createpreadsheet para criar uma nova planilha no Planilhas Google.
# Criar planilha no Planilhas Google
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. Percorra as planilhas no arquivo Excel. Em cada iteração, leia os dados da planilha e adicione-os a uma matriz.
# Percorra todas as planilhas
for worksheetIndex in range(collectionCount):

    # Obter planilha usando seu índice
    worksheet = collection.get(worksheetIndex)

    # Definir intervalo da planilha
    if(worksheetIndex==0):
        sheetRange= "{0}!A:Y".format(firstSheetName)
    else:
        add_sheet(service, spreadsheetID, worksheet.getName())
        sheetRange= "{0}!A:Y".format(worksheet.getName())

    # Obter número de linhas e colunas
    rows = worksheet.getCells().getMaxDataRow()
    cols = worksheet.getCells().getMaxDataColumn()

    # Lista para armazenar os dados da planilha
    worksheetDatalist = []

    # Percorrer as linhas
    for i in range(rows):
        # Lista para armazenar cada linha na planilha 
        rowDataList = []

        # Percorrer cada coluna na linha selecionada
        for j in range(cols):
            cellValue = worksheet.getCells().get(i, j).getValue()
            if( cellValue is not None):
                rowDataList.append(str(cellValue))
            else:
                rowDataList.append("")

        # Adicionar aos dados da planilha
        worksheetDatalist.append(rowDataList)
  1. Para cada planilha no arquivo Excel, crie uma solicitação para gravar dados no Planilhas Google.
# Definir valores
body = {
    'values': worksheetDatalist
}

# Executar solicitação
result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetID, range=sheetRange,
    valueInputOption='USER_ENTERED', body=body).execute()

# Imprimir número de células atualizadas    
print('{0} cells updated.'.format(result.get('updatedCells')))

A seguir está a função completa para exportar dados de um arquivo Excel para uma planilha no Google Sheets.

def export_to_google(fileName):
    # Se estiver modificando esses escopos, exclua o arquivo token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # O arquivo token.json armazena os tokens de acesso e atualização do usuário e é
    # criado automaticamente quando o fluxo de autorização é concluído pela primeira
    # Tempo.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Se não houver credenciais (válidas) disponíveis, deixe o usuário fazer login.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials1.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Salve as credenciais para a próxima execução
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Carregar pasta de trabalho do Excel
        wb = Workbook(fileName)

        # Obter coleção de planilhas
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Obter pasta de trabalho e nome da primeira planilha
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Criar planilha no Planilhas Google
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Para definir o intervalo da planilha
        sheetRange = None

        # Percorra todas as planilhas
        for worksheetIndex in range(collectionCount):

            # Obter planilha usando seu índice
            worksheet = collection.get(worksheetIndex)

            # Definir intervalo da planilha
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Obter número de linhas e colunas
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Lista para armazenar os dados da planilha
            worksheetDatalist = []

            # Percorrer as linhas
            for i in range(rows):
                # Lista para armazenar cada linha na planilha 
                rowDataList = []

                # Percorrer cada coluna na linha selecionada
                for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Adicionar aos dados da planilha
                worksheetDatalist.append(rowDataList)

            # Definir valores
            body = {
                'values': worksheetDatalist
            }
            
            # Executar solicitação
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Imprimir número de células atualizadas    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

    print("Workbook has been exported to Google Sheets.")

Código fonte completo

Veja a seguir o código-fonte completo para exportar um arquivo XLSX do Excel para o Planilhas Google em Python.

from __future__ import print_function
import jpype
import webbrowser
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
import asposecells

jpype.startJVM()
from asposecells.api import Workbook, License


def export_to_google(fileName):
    # Se estiver modificando esses escopos, exclua o arquivo token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # O arquivo token.json armazena os tokens de acesso e atualização do usuário e é
    # criado automaticamente quando o fluxo de autorização é concluído pela primeira
    # Tempo.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Se não houver credenciais (válidas) disponíveis, deixe o usuário fazer login.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials1.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Salve as credenciais para a próxima execução
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Carregar pasta de trabalho do Excel
        wb = Workbook(fileName)

        # Obter coleção de planilhas
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Obter pasta de trabalho e nome da primeira planilha
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Criar planilha no Planilhas Google
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Para definir o intervalo da planilha
        sheetRange = None

        # Percorra todas as planilhas
        for worksheetIndex in range(collectionCount):

            # Obter planilha usando seu índice
            worksheet = collection.get(worksheetIndex)

            # Definir intervalo da planilha
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Obter número de linhas e colunas
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Lista para armazenar os dados da planilha
            worksheetDatalist = []

            # Percorrer as linhas
            for i in range(rows):
                # Lista para armazenar cada linha na planilha 
                rowDataList = []

                # Percorrer cada coluna na linha selecionada
                for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Adicionar aos dados da planilha
                worksheetDatalist.append(rowDataList)

            # Definir valores
            body = {
                'values': worksheetDatalist
            }
            
            # Executar solicitação
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Imprimir número de células atualizadas    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

    print("Workbook has been exported to Google Sheets.")

def create_spreadsheet(_service, _title, _sheetName):   
    # Detalhes da planilha
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Criar planilha
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    # Abrir no navegador da web
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')

def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # Executar solicitação
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()

 # Crie um objeto de licença Aspose.Cells
license = License()

# Defina a licença do Aspose.Cells para evitar as limitações de avaliação
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")

export_to_google("Book1.xlsx")

Obtenha uma licença gratuita do Aspose.Cells

Você pode obter uma licença temporária gratuita e usar o Aspose.Cells para Python sem limitações de avaliação.

Conclusão

Neste artigo, você aprendeu como exportar dados do Excel para o Planilhas Google em Python. Abordamos como criar um projeto no Google Cloud, ativar a API do Planilhas Google, ler arquivos do Excel e exportar dados de arquivos do Excel para o Planilhas Google. Para explorar mais sobre o Aspose.Cells para Python, você pode visitar a documentação. Além disso, você pode fazer suas perguntas através do nosso fórum.

Veja também