W tym artykule dowiesz się, jak programowo wyeksportować dane Excela do Arkuszy Google w Python.

Eksportuj pliki Excela do Arkuszy Google w Python

Pliki Excel są szeroko stosowane do przechowywania danych i wykonywania na nich różnego rodzaju operacji, takich jak generowanie wykresów, stosowanie formuł. Z drugiej strony Arkusze Google to popularna aplikacja online do tworzenia arkuszy kalkulacyjnych i manipulowania nimi. Arkusze Google umożliwiają również udostępnianie arkuszy kalkulacyjnych wielu osobom w czasie rzeczywistym. W niektórych przypadkach może być konieczne programowe wyeksportowanie plików Excel XLS lub XLSX do Arkuszy Google. Aby to osiągnąć, ten artykuł zawiera kompletny przewodnik na temat konfigurowania projektu Google i eksportowania danych z plików Excel do Arkuszy Google w Python.

Wymagania wstępne — Eksportuj dane z Excela do Arkuszy Google w Python

Projekt Google Cloud

Aby komunikować się z Arkuszami Google, będziemy musieli utworzyć projekt w Google Cloud i włączyć Google Sheets API. Musimy również utworzyć poświadczenia, które będą używane do autoryzacji działań, które zamierzamy wykonać za pomocą naszego kodu. Możesz przeczytać wskazówki dotyczące jak utworzyć projekt Google Cloud i włączyć Google Sheets API.

Po utworzeniu projektu Google Cloud i włączeniu interfejsu API Arkuszy Google możemy przystąpić do instalacji następujących interfejsów API w naszej aplikacji Python.

Biblioteki Python do eksportowania plików Excela do Arkuszy Google

Aby wyeksportować dane z plików Excel XLS/XLSX do Arkuszy Google, będziemy potrzebować następujących interfejsów API.

Eksportuj dane z Excela do Arkuszy Google w Python

Poniżej znajduje się przewodnik krok po kroku, jak odczytywać dane z pliku Excel XLSX i zapisywać je w Arkuszach Google w aplikacji Python.

  1. Utwórz nową aplikację w języku Python.

  2. Zainstaluj w projekcie biblioteki klienckie Aspose.Cells i Google.

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. Umieść plik JSON (pobraliśmy po utworzeniu poświadczeń w Google Cloud) w katalogu projektu.

  2. Napisz metodę o nazwie createpreadsheet, która tworzy nowy arkusz kalkulacyjny w Arkuszach Google, ustawia nazwę arkusza domyślnego i zwraca identyfikator arkusza kalkulacyjnego.

def create_spreadsheet(_service, _title, _sheetName):   
    # Szczegóły arkusza kalkulacyjnego
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Utwórz arkusz kalkulacyjny
    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')))
    
    # Otwórz w przeglądarce internetowej
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')
  1. Napisz inną metodę o nazwie addsheet, aby dodać nowy arkusz do arkusza kalkulacyjnego Google.
def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # Wykonaj żądanie
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. Teraz zainicjuj usługę Arkusze Google przy użyciu poświadczeń (plik JSON) i zdefiniuj zakresy aplikacji. Parametr scopes służy do określenia uprawnień dostępu do Arkuszy Google i ich właściwości.
# W przypadku modyfikowania tych zakresów usuń plik token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
# Plik token.json przechowuje tokeny dostępu i odświeżania użytkownika i jest
# tworzony automatycznie po zakończeniu przepływu autoryzacji dla pierwszego
# czas.
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# Jeśli nie ma dostępnych (ważnych) poświadczeń, pozwól użytkownikowi się zalogować.
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)
    # Zapisz poświadczenia do następnego uruchomienia
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

    service = build('sheets', 'v4', credentials=creds)
  1. Następnie załaduj plik Excel XLS lub XLSX za pomocą Aspose.Cells i uzyskaj nazwę pierwszego arkusza w skoroszycie.
# Załaduj skoroszyt programu Excel
wb = Workbook(fileName)

# Pobierz kolekcję arkuszy roboczych
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# Pobierz skoroszyt i nazwę pierwszego arkusza
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. Wywołaj metodę createpreadsheet, aby utworzyć nowy arkusz kalkulacyjny w Arkuszach Google.
# Utwórz arkusz kalkulacyjny w Arkuszach Google
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. Przejrzyj w pętli arkusze w pliku Excel. W każdej iteracji odczytuj dane z arkusza i dodaj je do tablicy.
# Przejrzyj w pętli wszystkie arkusze
for worksheetIndex in range(collectionCount):

    # Pobierz arkusz roboczy, korzystając z jego indeksu
    worksheet = collection.get(worksheetIndex)

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

    # Uzyskaj liczbę wierszy i kolumn
    rows = worksheet.getCells().getMaxDataRow()
    cols = worksheet.getCells().getMaxDataColumn()

    # Lista do przechowywania danych arkusza roboczego
    worksheetDatalist = []

    # Zapętlaj rzędy
   for i in range(rows):
        # Lista do przechowywania każdego wiersza w arkuszu 
        rowDataList = []

        # Przejdź przez każdą kolumnę w wybranym rzędzie
       for j in range(cols):
            cellValue = worksheet.getCells().get(i, j).getValue()
            if( cellValue is not None):
                rowDataList.append(str(cellValue))
            else:
                rowDataList.append("")

        # Dodaj do danych arkusza
        worksheetDatalist.append(rowDataList)
  1. Dla każdego arkusza w pliku Excel utwórz żądanie zapisu danych do Arkuszy Google.
# Ustaw wartości
body = {
    'values': worksheetDatalist
}

# Wykonaj żądanie
result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetID, range=sheetRange,
    valueInputOption='USER_ENTERED', body=body).execute()

# Wydrukuj liczbę zaktualizowanych komórek    
print('{0} cells updated.'.format(result.get('updatedCells')))

Poniżej przedstawiono kompletną funkcję eksportowania danych z pliku Excel do arkusza kalkulacyjnego w Arkuszach Google.

def export_to_google(fileName):
    # W przypadku modyfikowania tych zakresów usuń plik token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # Plik token.json przechowuje tokeny dostępu i odświeżania użytkownika i jest
    # tworzony automatycznie po zakończeniu przepływu autoryzacji dla pierwszego
    # czas.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Jeśli nie ma dostępnych (ważnych) poświadczeń, pozwól użytkownikowi się zalogować.
    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)
        # Zapisz poświadczenia do następnego uruchomienia
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Załaduj skoroszyt programu Excel
        wb = Workbook(fileName)

        # Pobierz kolekcję arkuszy roboczych
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Pobierz skoroszyt i nazwę pierwszego arkusza
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Utwórz arkusz kalkulacyjny w Arkuszach Google
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Aby ustawić zakres arkusza
        sheetRange = None

        # Przejrzyj w pętli wszystkie arkusze
       for worksheetIndex in range(collectionCount):

            # Pobierz arkusz roboczy, korzystając z jego indeksu
            worksheet = collection.get(worksheetIndex)

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

            # Uzyskaj liczbę wierszy i kolumn
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Lista do przechowywania danych arkusza roboczego
            worksheetDatalist = []

            # Zapętlaj rzędy
           for i in range(rows):
                # Lista do przechowywania każdego wiersza w arkuszu 
                rowDataList = []

                # Przejdź przez każdą kolumnę w wybranym rzędzie
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Dodaj do danych arkusza
                worksheetDatalist.append(rowDataList)

            # Ustaw wartości
            body = {
                'values': worksheetDatalist
            }
            
            # Wykonaj żądanie
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Wydrukuj liczbę zaktualizowanych komórek    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

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

Kompletny kod źródłowy

Poniżej znajduje się pełny kod źródłowy do eksportowania pliku Excel XLSX do Arkuszy Google w 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):
    # W przypadku modyfikowania tych zakresów usuń plik token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # Plik token.json przechowuje tokeny dostępu i odświeżania użytkownika i jest
    # tworzony automatycznie po zakończeniu przepływu autoryzacji dla pierwszego
    # czas.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Jeśli nie ma dostępnych (ważnych) poświadczeń, pozwól użytkownikowi się zalogować.
    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)
        # Zapisz poświadczenia do następnego uruchomienia
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Załaduj skoroszyt programu Excel
        wb = Workbook(fileName)

        # Pobierz kolekcję arkuszy roboczych
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Pobierz skoroszyt i nazwę pierwszego arkusza
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Utwórz arkusz kalkulacyjny w Arkuszach Google
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Aby ustawić zakres arkusza
        sheetRange = None

        # Przejrzyj w pętli wszystkie arkusze
       for worksheetIndex in range(collectionCount):

            # Pobierz arkusz roboczy, korzystając z jego indeksu
            worksheet = collection.get(worksheetIndex)

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

            # Uzyskaj liczbę wierszy i kolumn
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Lista do przechowywania danych arkusza roboczego
            worksheetDatalist = []

            # Zapętlaj rzędy
           for i in range(rows):
                # Lista do przechowywania każdego wiersza w arkuszu 
                rowDataList = []

                # Przejdź przez każdą kolumnę w wybranym rzędzie
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Dodaj do danych arkusza
                worksheetDatalist.append(rowDataList)

            # Ustaw wartości
            body = {
                'values': worksheetDatalist
            }
            
            # Wykonaj żądanie
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Wydrukuj liczbę zaktualizowanych komórek    
            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):   
    # Szczegóły arkusza kalkulacyjnego
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Utwórz arkusz kalkulacyjny
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    # Otwórz w przeglądarce internetowej
    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)}
            }
        }
    ]}

    # Wykonaj żądanie
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()

 # Utwórz obiekt lodowy Aspose.Cells
license = License()

# Ustaw licencję Aspose.Cells, aby uniknąć ograniczeń ewaluacyjnych
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")

export_to_google("Book1.xlsx")

Uzyskaj bezpłatną licencję Aspose.Cells

Możesz otrzymać bezpłatną tymczasową licencję i używać Aspose.Cells for Python bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule nauczyłeś się eksportować dane Excela do Arkuszy Google w Python. Omówiliśmy, jak utworzyć projekt w Google Cloud, włączyć interfejs API Arkuszy Google, czytać pliki Excela i eksportować dane z plików Excela do Arkuszy Google. Aby dowiedzieć się więcej o Aspose.Cells for Python, możesz odwiedzić dokumentację. Możesz także zadawać pytania za pośrednictwem naszego forum.

Zobacz też