I den här artikeln kommer du att lära dig hur du exporterar Excel-data till Google Sheets programmatiskt i Python.
Excel-filer används ofta för att lagra data och utföra olika typer av operationer på den, som att generera diagram, tillämpa formler. Å andra sidan är Google Sheets ett populärt onlineprogram för att skapa och manipulera kalkylark. Google Sheets tillhandahåller också realtidsdelning av kalkylark med flera personer. I vissa fall kan du behöva exportera Excel XLS- eller XLSX-filer till Google Sheets programmatiskt. För att uppnå det ger den här artikeln en komplett guide om hur du ställer in ett Google-projekt och exporterar data från Excel-filer till Google Sheets i Python.
Förutsättningar - Exportera Excel-data till Google Sheets i Python
Google Cloud Project
För att kommunicera med Google Sheets måste vi skapa ett projekt på Google Cloud och aktivera Google Sheets API. Dessutom måste vi skapa autentiseringsuppgifter som används för att auktorisera de åtgärder vi ska utföra med vår kod. Du kan läsa riktlinjerna om hur man skapar ett Google Cloud-projekt och aktiverar Google Sheets API.
Efter att ha skapat Google Cloud-projektet och aktiverat Google Sheets API kan vi fortsätta att installera följande API:er i vår Python-applikation.
Python-bibliotek för att exportera Excel-filer till Google Sheets
För att exportera data från Excel XLS/XLSX-filer till Google Sheets behöver vi följande API:er.
- Aspose.Cells för Python - To read the data from Excel files.
- Googles klientbibliotek - To create and update spreadsheets on Google Sheets.
Exportera data från Excel till Google Sheets i Python
Följande är en steg-för-steg-guide om hur du läser data från en Excel XLSX-fil och skriver den till Google Sheets i en Python-applikation.
Skapa en ny Python-applikation.
Installera Aspose.Cells och Googles klientbibliotek i projektet.
pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Placera JSON-filen (vi har laddat ner efter att ha skapat autentiseringsuppgifter i Google Cloud) i projektets katalog.
Skriv en metod som heter createspreadsheet som skapar ett nytt kalkylark på Google Sheets, anger namnet på standardarket och returnerar kalkylarkets ID.
def create_spreadsheet(_service, _title, _sheetName):
# Kalkylbladsdetaljer
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# Skapa kalkylblad
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')))
# Öppna i webbläsaren
webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))
return spreadsheet.get('spreadsheetId')
- Skriv en annan metod som heter addsheet för att lägga till ett nytt ark i Googles kalkylark.
def add_sheet(_service, _spreadsheetID, _sheetName):
data = {'requests': [
{
'addSheet':{
'properties':{'title': '{0}'.format(_sheetName)}
}
}
]}
# Utför begäran
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
- Initiera nu Google Sheets-tjänsten med hjälp av inloggningsuppgifterna (JSON-fil) och definiera programmets omfattning. Parametern scopes används för att ange åtkomstbehörigheter till Google Kalkylark och deras egenskaper.
# Om du ändrar dessa omfång, ta bort filen token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# Filen token.json lagrar användarens åtkomst- och uppdateringstoken, och är
# skapas automatiskt när auktoriseringsflödet slutförs för det första
# tid.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# Om det inte finns några (giltiga) referenser tillgängliga, låt användaren logga 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)
# Spara referenserna för nästa körning
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('sheets', 'v4', credentials=creds)
- Ladda sedan Excel XLS- eller XLSX-filen med Aspose.Cells och hämta namnet på det första kalkylbladet i arbetsboken.
# Ladda Excel-arbetsbok
wb = Workbook(fileName)
# Hämta kalkylbladssamling
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Skaffa arbetsbok och första arks namn
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
- Anropa createspreadsheet-metoden för att skapa ett nytt kalkylark på Google Sheets.
# Skapa kalkylark på Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
- Bläddra igenom kalkylbladen i Excel-filen. Läs data från kalkylbladet i varje iteration och lägg till det i en array.
# Bläddra igenom alla kalkylblad
for worksheetIndex in range(collectionCount):
# Hämta kalkylblad med hjälp av dess index
worksheet = collection.get(worksheetIndex)
# Ställ in kalkylbladsintervall
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Få antal rader och kolumner
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# Lista för att lagra arbetsbladets data
worksheetDatalist = []
# Slinga genom rader
for i in range(rows):
# Lista för att lagra varje rad i kalkylbladet
rowDataList = []
# Gå igenom varje kolumn i den valda raden
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Lägg till kalkylbladsdata
worksheetDatalist.append(rowDataList)
- Skapa en begäran om att skriva data till Google Sheets för varje kalkylblad i Excel-filen.
# Ställ in värden
body = {
'values': worksheetDatalist
}
# Utför begäran
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Skriv ut antal uppdaterade celler
print('{0} cells updated.'.format(result.get('updatedCells')))
Följande är den kompletta funktionen för att exportera data från en Excel-fil till ett kalkylblad i Google Sheets.
def export_to_google(fileName):
# Om du ändrar dessa omfång, ta bort filen token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# Filen token.json lagrar användarens åtkomst- och uppdateringstoken, och är
# skapas automatiskt när auktoriseringsflödet slutförs för det första
# tid.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# Om det inte finns några (giltiga) referenser tillgängliga, låt användaren logga 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)
# Spara referenserna för nästa körning
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# Ladda Excel-arbetsbok
wb = Workbook(fileName)
# Hämta kalkylbladssamling
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Skaffa arbetsbok och första arkets namn
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# Skapa kalkylark på Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# För att ställa in kalkylbladsintervall
sheetRange = None
# Bläddra igenom alla kalkylblad
for worksheetIndex in range(collectionCount):
# Hämta kalkylblad med hjälp av dess index
worksheet = collection.get(worksheetIndex)
# Ställ in kalkylbladsintervall
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Få antal rader och kolumner
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# Lista för att lagra arbetsbladets data
worksheetDatalist = []
# Slinga genom rader
for i in range(rows):
# Lista för att lagra varje rad i kalkylbladet
rowDataList = []
# Gå igenom varje kolumn i den valda raden
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Lägg till i kalkylbladsdata
worksheetDatalist.append(rowDataList)
# Ställ in värden
body = {
'values': worksheetDatalist
}
# Utför begäran
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Skriv ut antal uppdaterade celler
print('{0} cells updated.'.format(result.get('updatedCells')))
except HttpError as err:
print(err)
print("Workbook has been exported to Google Sheets.")
Komplett källkod
Följande är den fullständiga källkoden för att exportera en Excel XLSX-fil till Google Sheets i 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):
# Om du ändrar dessa omfång, ta bort filen token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# Filen token.json lagrar användarens åtkomst- och uppdateringstoken, och är
# skapas automatiskt när auktoriseringsflödet slutförs för det första
# tid.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# Om det inte finns några (giltiga) referenser tillgängliga, låt användaren logga 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)
# Spara referenserna för nästa körning
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# Ladda Excel-arbetsbok
wb = Workbook(fileName)
# Hämta kalkylbladssamling
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Skaffa arbetsbok och första arks namn
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# Skapa kalkylark på Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# För att ställa in kalkylbladsintervall
sheetRange = None
# Bläddra igenom alla kalkylblad
for worksheetIndex in range(collectionCount):
# Hämta kalkylblad med hjälp av dess index
worksheet = collection.get(worksheetIndex)
# Ställ in kalkylbladsintervall
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Få antal rader och kolumner
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# Lista för att lagra arbetsbladets data
worksheetDatalist = []
# Slinga genom rader
for i in range(rows):
# Lista för att lagra varje rad i kalkylbladet
rowDataList = []
# Gå igenom varje kolumn i den valda raden
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Lägg till kalkylbladsdata
worksheetDatalist.append(rowDataList)
# Ställ in värden
body = {
'values': worksheetDatalist
}
# Utför begäran
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Skriv ut antal uppdaterade celler
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):
# Kalkylbladsdetaljer
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# Skapa kalkylblad
spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
fields='spreadsheetId').execute()
# Öppna i webbläsaren
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)}
}
}
]}
# Utför begäran
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
# Skapa ett Aspose.Cells-licensobjekt
license = License()
# Ställ in licensen för Aspose.Cells för att undvika utvärderingsbegränsningarna
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")
export_to_google("Book1.xlsx")
Skaffa en gratis Aspose.Cells-licens
Du kan få en gratis tillfällig licens och använda Aspose.Cells för Python utan utvärderingsbegränsningar.
Slutsats
I den här artikeln har du lärt dig hur du exporterar Excel-data till Google Sheets i Python. Vi har tagit upp hur man skapar ett projekt på Google Cloud, aktiverar Google Sheets API, läser Excel-filer och exporterar data från Excel-filer till Google Sheets. För att utforska mer om Aspose.Cells for Python kan du besöka dokumentationen. Du kan också ställa dina frågor via vårt forum.