W tym artykule dowiesz się, jak programowo wyeksportować dane 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.
- Aspose.Cells for Python - To read the data from Excel files.
- Biblioteki klienta Google - To create and update spreadsheets on Google Sheets.
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.
Utwórz nową aplikację w języku Python.
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
Umieść plik JSON (pobraliśmy po utworzeniu poświadczeń w Google Cloud) w katalogu projektu.
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')
- 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()
- 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)
- 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()
- 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)
- 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)
- 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.