V tomto článku se dozvíte, jak exportovat data Excelu do Tabulek Google programově v Pythonu.

Exportujte soubory Excel do Tabulek Google v Pythonu

Soubory Excel se široce používají k ukládání dat a provádění různých typů operací s nimi, jako je generování grafů, použití vzorců. Na druhou stranu Google Sheets je oblíbená online aplikace pro vytváření a manipulaci s tabulkami. Tabulky Google také umožňují sdílení tabulek v reálném čase s více lidmi. V určitých případech může být nutné exportovat soubory Excel XLS nebo XLSX do Tabulek Google programově. Chcete-li toho dosáhnout, tento článek poskytuje úplný průvodce, jak nastavit projekt Google a exportovat data ze souborů Excel do Tabulek Google v Pythonu.

Předpoklady - Exportujte data Excelu do Tabulek Google v Pythonu

Projekt Google Cloud

Abychom mohli komunikovat s Tabulkami Google, budeme muset vytvořit projekt na Google Cloud a povolit Google Sheets API. Také musíme vytvořit přihlašovací údaje, které se používají k autorizaci akcí, které budeme provádět s naším kódem. Můžete si přečíst pokyny týkající se jak vytvořit projekt Google Cloud a aktivovat rozhraní Google Sheets API.

Po vytvoření projektu Google Cloud a povolení rozhraní Google Sheets API můžeme přistoupit k instalaci následujících rozhraní API do naší aplikace Python.

Knihovny Pythonu pro export souborů Excel do Tabulek Google

K exportu dat ze souborů Excel XLS/XLSX do Tabulek Google budeme potřebovat následující rozhraní API.

Exportujte data z Excelu do Tabulek Google v Pythonu

Následuje podrobný návod, jak číst data ze souboru Excel XLSX a zapisovat je do Tabulek Google v aplikaci Python.

  1. Vytvořte novou aplikaci Python.

  2. Nainstalujte do projektu klientské knihovny Aspose.Cells a Google.

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. Umístěte soubor JSON (stáhli jsme po vytvoření přihlašovacích údajů v Google Cloud) do adresáře projektu.

  2. Napište metodu s názvem createpreadsheet, která vytvoří novou tabulku v Tabulkách Google, nastaví název výchozího listu a vrátí ID tabulky.

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

    # Vytvořte tabulku
    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')))
    
    # Otevřít ve webovém prohlížeči
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')
  1. Napište další metodu s názvem addsheet pro přidání nového listu do tabulky Google.
def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # Provést požadavek
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. Nyní inicializujte službu Tabulky Google pomocí přihlašovacích údajů (soubor JSON) a definujte rozsahy aplikace. Parametr scopes se používá k určení přístupových oprávnění k Tabulkám Google a jejich vlastnostem.
# Pokud tyto rozsahy upravujete, odstraňte soubor token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
# Soubor token.json ukládá přístupové a obnovovací tokeny uživatele a je
# vytvořené automaticky po dokončení autorizačního toku pro první
# čas.
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# Pokud nejsou k dispozici žádné (platné) přihlašovací údaje, nechte uživatele přihlásit se.
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)
    # Uložte přihlašovací údaje pro další spuštění
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

    service = build('sheets', 'v4', credentials=creds)
  1. Poté načtěte soubor Excel XLS nebo XLSX pomocí Aspose.Cells a získejte název prvního listu v sešitu.
# Načíst sešit aplikace Excel
wb = Workbook(fileName)

# Získejte sbírku pracovních listů
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# Získejte název sešitu a prvního listu
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. Voláním metody createpreadsheet vytvořte novou tabulku v Tabulkách Google.
# Vytvořte tabulku v Tabulkách Google
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. Procházejte listy v souboru aplikace Excel. V každé iteraci načtěte data z listu a přidejte je do pole.
# Projděte všechny pracovní listy
for worksheetIndex in range(collectionCount):

    # Získejte list pomocí jeho indexu
    worksheet = collection.get(worksheetIndex)

    # Nastavit rozsah listu
    if(worksheetIndex==0):
        sheetRange= "{0}!A:Y".format(firstSheetName)
    else:
        add_sheet(service, spreadsheetID, worksheet.getName())
        sheetRange= "{0}!A:Y".format(worksheet.getName())

    # Získejte počet řádků a sloupců
    rows = worksheet.getCells().getMaxDataRow()
    cols = worksheet.getCells().getMaxDataColumn()

    # Seznam pro uložení dat listu
    worksheetDatalist = []

    # Procházet řádky
   for i in range(rows):
        # Seznam pro uložení každého řádku v listu 
        rowDataList = []

        # Procházejte každý sloupec ve vybraném řádku
       for j in range(cols):
            cellValue = worksheet.getCells().get(i, j).getValue()
            if( cellValue is not None):
                rowDataList.append(str(cellValue))
            else:
                rowDataList.append("")

        # Přidat do dat listu
        worksheetDatalist.append(rowDataList)
  1. Pro každý list v souboru aplikace Excel vytvořte požadavek na zápis dat do Tabulek Google.
# Nastavte hodnoty
body = {
    'values': worksheetDatalist
}

# Provést požadavek
result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetID, range=sheetRange,
    valueInputOption='USER_ENTERED', body=body).execute()

# Tisk počtu aktualizovaných buněk    
print('{0} cells updated.'.format(result.get('updatedCells')))

Následuje kompletní funkce pro export dat ze souboru aplikace Excel do tabulky v Tabulkách Google.

def export_to_google(fileName):
    # Pokud tyto rozsahy upravujete, odstraňte soubor token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # Soubor token.json ukládá přístupové a obnovovací tokeny uživatele a je
    # vytvořené automaticky po dokončení autorizačního toku pro první
    # čas.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Pokud nejsou k dispozici žádné (platné) přihlašovací údaje, nechte uživatele přihlásit se.
    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)
        # Uložte přihlašovací údaje pro další spuštění
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Načíst sešit aplikace Excel
        wb = Workbook(fileName)

        # Získejte sbírku pracovních listů
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Získejte název sešitu a prvního listu
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Vytvořte tabulku v Tabulkách Google
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Chcete-li nastavit rozsah listu
        sheetRange = None

        # Projděte všechny pracovní listy
       for worksheetIndex in range(collectionCount):

            # Získejte list pomocí jeho indexu
            worksheet = collection.get(worksheetIndex)

            # Nastavit rozsah listu
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Získejte počet řádků a sloupců
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Seznam pro uložení dat listu
            worksheetDatalist = []

            # Procházet řádky
           for i in range(rows):
                # Seznam pro uložení každého řádku v listu 
                rowDataList = []

                # Procházejte každý sloupec ve vybraném řádku
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Přidat do dat listu
                worksheetDatalist.append(rowDataList)

            # Nastavte hodnoty
            body = {
                'values': worksheetDatalist
            }
            
            # Provést požadavek
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Tisk počtu aktualizovaných buněk    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

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

Kompletní zdrojový kód

Níže je uveden úplný zdrojový kód pro export souboru Excel XLSX do Tabulek Google v Pythonu.

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):
    # Pokud tyto rozsahy upravujete, odstraňte soubor token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # Soubor token.json ukládá přístupové a obnovovací tokeny uživatele a je
    # vytvořené automaticky po dokončení autorizačního toku pro první
    # čas.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Pokud nejsou k dispozici žádné (platné) přihlašovací údaje, nechte uživatele přihlásit se.
    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)
        # Uložte přihlašovací údaje pro další spuštění
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Načíst sešit aplikace Excel
        wb = Workbook(fileName)

        # Získejte sbírku pracovních listů
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Získejte název sešitu a prvního listu
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Vytvořte tabulku v Tabulkách Google
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Chcete-li nastavit rozsah listu
        sheetRange = None

        # Projděte všechny pracovní listy
       for worksheetIndex in range(collectionCount):

            # Získejte list pomocí jeho indexu
            worksheet = collection.get(worksheetIndex)

            # Nastavit rozsah listu
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Získejte počet řádků a sloupců
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Seznam pro uložení dat listu
            worksheetDatalist = []

            # Procházet řádky
           for i in range(rows):
                # Seznam pro uložení každého řádku v listu 
                rowDataList = []

                # Procházejte každý sloupec ve vybraném řádku
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Přidat do dat listu
                worksheetDatalist.append(rowDataList)

            # Nastavte hodnoty
            body = {
                'values': worksheetDatalist
            }
            
            # Provést požadavek
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Tisk počtu aktualizovaných buněk    
            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):   
    # Podrobnosti tabulky
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Vytvořte tabulku
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    # Otevřít ve webovém prohlížeči
    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)}
            }
        }
    ]}

    # Provést požadavek
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()

 # Vytvořte objekt Aspose.Cells icense
license = License()

# Nastavte licenci Aspose.Cells, abyste se vyhnuli omezením hodnocení
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")

export_to_google("Book1.xlsx")

Získejte bezplatnou licenci Aspose.Cells

Můžete získat zdarma dočasnou licenci a používat Aspose.Cells pro Python bez omezení hodnocení.

Závěr

V tomto článku jste se naučili exportovat data aplikace Excel do Tabulek Google v Pythonu. Probrali jsme, jak vytvořit projekt v Google Cloud, povolit Google Sheets API, číst soubory Excel a exportovat data ze souborů Excel do Tabulek Google. Chcete-li prozkoumat více o Aspose.Cells pro Python, můžete navštívit dokumentaci. Také se můžete ptát na naše fórum.

Viz také