Neste artigo, você aprenderá como exportar dados do Excel para o Planilhas Google programaticamente 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.
- Aspose.Cells for Python - To read the data from Excel files.
- Bibliotecas de cliente do Google - To create and update spreadsheets on Google Sheets.
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.
Crie um novo aplicativo Python.
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
Coloque o arquivo JSON (que baixamos após criar as credenciais no Google Cloud) no diretório do projeto.
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')
- 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()
- 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)
- 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()
- Chame o método createpreadsheet para criar uma nova planilha no Planilhas Google.
# Criar planilha no Planilhas Google
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
- 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)
- 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.