I den här artikeln kommer du att lära dig hur du exporterar Excel-data till Google Sheets programmatiskt i Python.

Exportera Excel-filer till Google Sheets 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.

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.

  1. Skapa en ny Python-applikation.

  2. 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
  1. Placera JSON-filen (vi har laddat ner efter att ha skapat autentiseringsuppgifter i Google Cloud) i projektets katalog.

  2. 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')
  1. 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()
  1. 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)
  1. 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()
  1. Anropa createspreadsheet-metoden för att skapa ett nytt kalkylark på Google Sheets.
# Skapa kalkylark på Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. 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)
  1. 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.

Se även