En este artículo, aprenderá cómo exportar datos de Excel a Hojas de cálculo de Google mediante programación en Python.

Exportar archivos de Excel a Google Sheets en Python

Los archivos Excel son ampliamente utilizados para almacenar los datos y realizar varios tipos de operaciones en ellos, como generar gráficos, aplicar fórmulas. Por otro lado, Google Sheets es una popular aplicación en línea para crear y manipular hojas de cálculo. Hojas de cálculo de Google también permite compartir hojas de cálculo en tiempo real con varias personas. En ciertos casos, es posible que deba exportar archivos Excel XLS o XLSX a Hojas de cálculo de Google mediante programación. Para lograrlo, este artículo proporciona una guía completa sobre cómo configurar un proyecto de Google y exportar datos de archivos de Excel a Hojas de cálculo de Google en Python.

Requisitos previos: exportar datos de Excel a hojas de cálculo de Google en Python

Proyecto de nube de Google

Para comunicarnos con Hojas de cálculo de Google, tendremos que crear un proyecto en Google Cloud y habilitar la API de Hojas de cálculo de Google. Además, necesitamos crear credenciales que se utilicen para autorizar las acciones que vamos a realizar con nuestro código. Puede leer las pautas sobre cómo crear un proyecto de Google Cloud y habilitar la API de Hojas de cálculo de Google.

Después de crear el proyecto de Google Cloud y habilitar la API de Google Sheets, podemos proceder a instalar las siguientes API en nuestra aplicación de Python.

Bibliotecas de Python para exportar archivos de Excel a Google Sheets

Para exportar datos de archivos Excel XLS/XLSX a Hojas de cálculo de Google, necesitaremos las siguientes API.

Exportar datos de Excel a Google Sheets en Python

La siguiente es una guía paso a paso sobre cómo leer datos de un archivo XLSX de Excel y escribirlos en Hojas de cálculo de Google en una aplicación de Python.

  1. Cree una nueva aplicación de Python.

  2. Instale las bibliotecas cliente de Aspose.Cells y Google en el proyecto.

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. Coloca el archivo JSON (que hemos descargado después de crear las credenciales en Google Cloud) en el directorio del proyecto.

  2. Escriba un método llamado createspreadsheet que cree una nueva hoja de cálculo en Hojas de cálculo de Google, establezca el nombre de la hoja predeterminada y devuelva el ID de la hoja de cálculo.

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. Escriba otro método llamado addsheet para agregar una nueva hoja en la hoja de cálculo de 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. Ahora, inicialice el servicio Google Sheets utilizando las credenciales (archivo JSON) y defina los alcances de la aplicación. El parámetro scopes se usa para especificar los permisos de acceso a Google Sheets y sus propiedades.
# 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. Luego, cargue el archivo Excel XLS o XLSX usando Aspose.Cells y obtenga el nombre de la primera hoja de trabajo en el Workbook.
# 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. Llame al método createspreadsheet para crear una nueva hoja de cálculo en Hojas de cálculo de Google.
# Create spreadsheet on Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. Recorra las hojas de trabajo en el archivo de Excel. En cada iteración, lea los datos de la hoja de trabajo y agréguelos a una matriz.
# 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. Para cada hoja de cálculo del archivo de Excel, cree una solicitud para escribir datos en las Hojas de cálculo de Google.
# 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')))

La siguiente es la función completa para exportar datos de un archivo de Excel a una hoja de cálculo en Hojas de cálculo de Google.

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.")

Código fuente completo

El siguiente es el código fuente completo para exportar un archivo Excel XLSX a Hojas de cálculo de Google 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")

Obtenga una licencia gratuita de Aspose.Cells

Puede obtener una licencia temporal gratuita y usar Aspose.Cells for Python sin limitaciones de evaluación.

Conclusión

En este artículo, ha aprendido a exportar datos de Excel a Hojas de cálculo de Google en Python. Hemos cubierto cómo crear un proyecto en Google Cloud, habilitar la API de Google Sheets, leer archivos de Excel y exportar datos de archivos de Excel a Google Sheets. Para explorar más sobre Aspose.Cells for Python, puede visitar la documentación. Además, puede hacer sus preguntas a través de nuestro foro.

Ver también