Dans cet article, vous apprendrez à exporter des données Excel vers Google Sheets par programmation en Python.
Les fichiers Excel sont largement utilisés pour stocker les données et y effectuer divers types d’opérations, telles que la génération de graphiques, l’application de formules. D’autre part, Google Sheets est une application en ligne populaire pour créer et manipuler des feuilles de calcul. Google Sheets permet également le partage en temps réel de feuilles de calcul avec plusieurs personnes. Dans certains cas, vous devrez peut-être exporter des fichiers Excel XLS ou XLSX vers Google Sheets par programme. Pour y parvenir, cet article fournit un guide complet sur la configuration d’un projet Google et l’exportation de données à partir de fichiers Excel vers Google Sheets en Python.
Prérequis - Exporter des données Excel vers Google Sheets en Python
Projet Google Cloud
Pour communiquer avec Google Sheets, nous devrons créer un projet sur Google Cloud et activer l’API Google Sheets. De plus, nous devons créer des informations d’identification qui sont utilisées pour autoriser les actions que nous allons effectuer avec notre code. Vous pouvez lire les directives sur comment créer un projet Google Cloud et activer l’API Google Sheets.
Après avoir créé le projet Google Cloud et activé l’API Google Sheets, nous pouvons procéder à l’installation des API suivantes dans notre application Python.
Bibliothèques Python pour exporter des fichiers Excel vers Google Sheets
Pour exporter des données à partir de fichiers Excel XLS/XLSX vers Google Sheets, nous aurons besoin des API suivantes.
- Aspose.Cells for Python - To read the data from Excel files.
- Bibliothèques clientes Google - To create and update spreadsheets on Google Sheets.
Exporter des données d’Excel vers Google Sheets en Python
Ce qui suit est le guide étape par étape sur la façon de lire les données d’un fichier Excel XLSX et de les écrire dans Google Sheets dans une application Python.
Créez une nouvelle application Python.
Installez Aspose.Cells et les bibliothèques clientes Google dans le projet.
pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Placez le fichier JSON (que nous avons téléchargé après avoir créé les informations d’identification dans Google Cloud) dans le répertoire du projet.
Écrivez une méthode nommée createpreadsheet qui crée une nouvelle feuille de calcul sur Google Sheets, définit le nom de la feuille par défaut et renvoie l’ID de la feuille de calcul.
def create_spreadsheet(_service, _title, _sheetName):
# Spreadsheet details
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# Create spreadsheet
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')))
# Open in web browser
webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))
return spreadsheet.get('spreadsheetId')
- Écrivez une autre méthode nommée addsheet pour ajouter une nouvelle feuille dans la feuille de calcul Google.
def add_sheet(_service, _spreadsheetID, _sheetName):
data = {'requests': [
{
'addSheet':{
'properties':{'title': '{0}'.format(_sheetName)}
}
}
]}
# Execute request
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
- Maintenant, initialisez le service Google Sheets à l’aide des informations d’identification (fichier JSON) et définissez les étendues de l’application. Le paramètre scopes est utilisé pour spécifier les autorisations d’accès à Google Sheets et leurs propriétés.
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
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)
# Save the credentials for the next run
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('sheets', 'v4', credentials=creds)
- Ensuite, chargez le fichier Excel XLS ou XLSX à l’aide de Aspose.Cells et obtenez le nom de la première feuille de calcul du classeur.
# Load Excel workbook
wb = Workbook(fileName)
# Get worksheets collection
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Get workbook and first sheet's name
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
- Appelez la méthodecreatespreadsheet pour créer une nouvelle feuille de calcul sur Google Sheets.
# Create spreadsheet on Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
- Parcourez les feuilles de calcul dans le fichier Excel. À chaque itération, lisez les données de la feuille de calcul et ajoutez-les à un tableau.
# Loop through all the worksheets
for worksheetIndex in range(collectionCount):
# Get worksheet using its index
worksheet = collection.get(worksheetIndex)
# Set worksheet range
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Get number of rows and columns
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# List to store worksheet's data
worksheetDatalist = []
# Loop through rows
for i in range(rows):
# List to store each row in worksheet
rowDataList = []
# Loop through each column in selected row
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Add to worksheet data
worksheetDatalist.append(rowDataList)
- Pour chaque feuille de calcul du fichier Excel, créez une demande d’écriture de données dans Google Sheets.
# Set values
body = {
'values': worksheetDatalist
}
# Execute request
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Print number of updated cells
print('{0} cells updated.'.format(result.get('updatedCells')))
Voici la fonction complète pour exporter des données d’un fichier Excel vers une feuille de calcul dans Google Sheets.
def export_to_google(fileName):
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
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)
# Save the credentials for the next run
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# Load Excel workbook
wb = Workbook(fileName)
# Get worksheets collection
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Get workbook and first sheet's name
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# Create spreadsheet on Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# To set worksheet range
sheetRange = None
# Loop through all the worksheets
for worksheetIndex in range(collectionCount):
# Get worksheet using its index
worksheet = collection.get(worksheetIndex)
# Set worksheet range
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Get number of rows and columns
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# List to store worksheet's data
worksheetDatalist = []
# Loop through rows
for i in range(rows):
# List to store each row in worksheet
rowDataList = []
# Loop through each column in selected row
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Add to worksheet data
worksheetDatalist.append(rowDataList)
# Set values
body = {
'values': worksheetDatalist
}
# Execute request
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Print number of updated cells
print('{0} cells updated.'.format(result.get('updatedCells')))
except HttpError as err:
print(err)
print("Workbook has been exported to Google Sheets.")
Code source complet
Voici le code source complet pour exporter un fichier Excel XLSX vers Google Sheets en 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):
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
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)
# Save the credentials for the next run
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# Load Excel workbook
wb = Workbook(fileName)
# Get worksheets collection
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Get workbook and first sheet's name
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# Create spreadsheet on Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# To set worksheet range
sheetRange = None
# Loop through all the worksheets
for worksheetIndex in range(collectionCount):
# Get worksheet using its index
worksheet = collection.get(worksheetIndex)
# Set worksheet range
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Get number of rows and columns
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# List to store worksheet's data
worksheetDatalist = []
# Loop through rows
for i in range(rows):
# List to store each row in worksheet
rowDataList = []
# Loop through each column in selected row
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Add to worksheet data
worksheetDatalist.append(rowDataList)
# Set values
body = {
'values': worksheetDatalist
}
# Execute request
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Print number of updated cells
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):
# Spreadsheet details
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# Create spreadsheet
spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
fields='spreadsheetId').execute()
# Open in web browser
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)}
}
}
]}
# Execute request
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
# Create a Aspose.Cells icense object
license = License()
# Set the license of Aspose.Cells to avoid the evaluation limitations
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")
export_to_google("Book1.xlsx")
Obtenez une licence Aspose.Cells gratuite
Vous pouvez obtenir une licence temporaire gratuite et utiliser Aspose.Cells for Python sans limitation d’évaluation.
Conclusion
Dans cet article, vous avez appris à exporter des données Excel vers Google Sheets en Python. Nous avons expliqué comment créer un projet sur Google Cloud, activer l’API Google Sheets, lire des fichiers Excel et exporter des données de fichiers Excel vers Google Sheets. Pour en savoir plus sur Aspose.Cells for Python, vous pouvez consulter la documentation. Vous pouvez également poser vos questions via notre forum.