Dans cet article, vous apprendrez à exporter des données Excel vers Google Sheets par programmation en Python.

Exporter des fichiers Excel vers Google Sheets 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.

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.

  1. Créez une nouvelle application Python.

  2. 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
  1. 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.

  2. É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')
  1. É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()
  1. 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)
  1. 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()
  1. 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)
  1. 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)
  1. 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.

Voir également