在本文中,您將了解如何使用 Python 以編程方式將 Excel 數據導出到 Google 表格。

在 Python 中將 Excel 文件導出到 Google 表格

Excel 文件廣泛用於存儲數據並對其執行各種類型的操作,例如生成圖表、應用公式。另一方面,Google Sheets 是一種流行的在線應用程序,用於創建和操作電子表格。 Google 表格還提供與多人實時共享電子表格的功能。在某些情況下,您可能需要以編程方式將 Excel XLS 或 XLSX 文件導出到 Google 表格。為實現這一目標,本文提供了有關如何設置 Google 項目並將數據從 Excel 文件導出到 Python 中的 Google 表格的完整指南。

先決條件 - 在 Python 中將 Excel 數據導出到 Google 表格

谷歌云項目

要與 Google Sheets 通信,我們必須在 Google Cloud 上創建一個項目並啟用 Google Sheets API。此外,我們需要創建用於授權我們將使用代碼執行的操作的憑據。您可以閱讀有關如何創建 Google Cloud 項目和啟用 Google Sheets API 的指南。

創建 Google Cloud 項目並啟用 Google Sheets API 後,我們可以繼續在我們的 Python 應用程序中安裝以下 API。

將 Excel 文件導出到 Google 表格的 Python 庫

要將數據從 Excel XLS/XLSX 文件導出到 Google 表格,我們需要以下 API。

在 Python 中將數據從 Excel 導出到 Google 表格

以下是有關如何在 Python 應用程序中從 Excel XLSX 文件讀取數據並將其寫入 Google 表格的分步指南。

  1. 創建一個新的 Python 應用程序。

2.在項目中安裝Aspose.Cells和Google客戶端庫。

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. 將 JSON 文件(我們在 Google Cloud 中創建憑證後下載)放入項目目錄。

  2. 編寫一個名為 createspreadsheet 的方法,在 Google 表格上創建一個新電子表格,設置默認表格的名稱,並返回電子表格的 ID。

def create_spreadsheet(_service, _title, _sheetName):   
    # 電子表格詳細信息
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # 創建電子表格
    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')))
    
    # 在網絡瀏覽器中打開
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')
  1. 編寫另一個名為 addsheet 的方法在 Google 電子表格中添加一個新工作表。
def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # 執行請求
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. 現在,使用憑據(JSON 文件)初始化 Google 表格服務並定義應用程序的範圍。 scopes 參數用於指定對 Google 表格及其屬性的訪問權限。
# 如果修改這些範圍,請刪除文件 token.json。
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
# 文件 token.json 存儲用戶的訪問和刷新令牌,並且是
# 當授權流程第一次完成時自動創建
# 時間。
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# 如果沒有可用的(有效)憑據,請讓用戶登錄。
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)
    # 保存下次運行的憑據
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

    service = build('sheets', 'v4', credentials=creds)
  1. 然後,使用 Aspose.Cells 加載 Excel XLS 或 XLSX 文件,並獲取工作簿中第一個工作表的名稱。
# 加載 Excel 工作簿
wb = Workbook(fileName)

# 獲取工作表集合
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# 獲取工作簿和第一個工作表的名稱
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. 調用createspreadsheet 方法在Google Sheets 上創建一個新的電子表格。
# 在 Google 表格上創建電子表格
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. 遍歷 Excel 文件中的工作表。在每次迭代中,從工作表中讀取數據並將其添加到數組中。
# 遍歷所有工作表
for worksheetIndex in range(collectionCount):

    # 使用其索引獲取工作表
    worksheet = collection.get(worksheetIndex)

    # 設置工作表範圍
    if(worksheetIndex==0):
        sheetRange= "{0}!A:Y".format(firstSheetName)
    else:
        add_sheet(service, spreadsheetID, worksheet.getName())
        sheetRange= "{0}!A:Y".format(worksheet.getName())

    # 獲取行數和列數
    rows = worksheet.getCells().getMaxDataRow()
    cols = worksheet.getCells().getMaxDataColumn()

    # 存儲工作表數據的列表
    worksheetDatalist = []

    # 遍歷行
   for i in range(rows):
        # 列表以存儲工作表中的每一行 
        rowDataList = []

        # 遍歷所選行中的每一列
       for j in range(cols):
            cellValue = worksheet.getCells().get(i, j).getValue()
            if( cellValue is not None):
                rowDataList.append(str(cellValue))
            else:
                rowDataList.append("")

        # 添加到工作表數據
        worksheetDatalist.append(rowDataList)
  1. 對於 Excel 文件中的每個工作表,創建一個將數據寫入 Google 表格的請求。
# 設定值
body = {
    'values': worksheetDatalist
}

# 執行請求
result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetID, range=sheetRange,
    valueInputOption='USER_ENTERED', body=body).execute()

# 打印更新單元格的數量    
print('{0} cells updated.'.format(result.get('updatedCells')))

以下是將數據從 Excel 文件導出到 Google 表格中的電子表格的完整功能。

def export_to_google(fileName):
    # 如果修改這些範圍,請刪除文件 token.json。
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # 文件 token.json 存儲用戶的訪問和刷新令牌,並且是
    # 當授權流程第一次完成時自動創建
    # 時間。
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # 如果沒有可用的(有效)憑據,請讓用戶登錄。
    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)
        # 保存下次運行的憑據
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # 加載 Excel 工作簿
        wb = Workbook(fileName)

        # 獲取工作表集合
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # 獲取工作簿和第一個工作表的名稱
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # 在 Google 表格上創建電子表格
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # 設置工作表範圍
        sheetRange = None

        # 遍歷所有工作表
       for worksheetIndex in range(collectionCount):

            # 使用其索引獲取工作表
            worksheet = collection.get(worksheetIndex)

            # 設置工作表範圍
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # 獲取行數和列數
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # 存儲工作表數據的列表
            worksheetDatalist = []

            # 遍歷行
           for i in range(rows):
                # 列表以存儲工作表中的每一行 
                rowDataList = []

                # 遍歷所選行中的每一列
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # 添加到工作表數據
                worksheetDatalist.append(rowDataList)

            # 設定值
            body = {
                'values': worksheetDatalist
            }
            
            # 執行請求
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # 打印更新單元格的數量    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

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

完整的源代碼

以下是使用 Python 將 Excel XLSX 文件導出到 Google 表格的完整源代碼。

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):
    # 如果修改這些範圍,請刪除文件 token.json。
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # 文件 token.json 存儲用戶的訪問和刷新令牌,並且是
    # 當授權流程第一次完成時自動創建
    # 時間。
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # 如果沒有可用的(有效)憑據,請讓用戶登錄。
    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)
        # 保存下次運行的憑據
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # 加載 Excel 工作簿
        wb = Workbook(fileName)

        # 獲取工作表集合
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # 獲取工作簿和第一個工作表的名稱
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # 在 Google 表格上創建電子表格
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # 設置工作表範圍
        sheetRange = None

        # 遍歷所有工作表
       for worksheetIndex in range(collectionCount):

            # 使用其索引獲取工作表
            worksheet = collection.get(worksheetIndex)

            # 設置工作表範圍
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # 獲取行數和列數
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # 存儲工作表數據的列表
            worksheetDatalist = []

            # 遍歷行
           for i in range(rows):
                # 列表以存儲工作表中的每一行 
                rowDataList = []

                # 遍歷所選行中的每一列
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # 添加到工作表數據
                worksheetDatalist.append(rowDataList)

            # 設定值
            body = {
                'values': worksheetDatalist
            }
            
            # 執行請求
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # 打印更新單元格的數量    
            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):   
    # 電子表格詳細信息
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # 創建電子表格
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    # 在網絡瀏覽器中打開
    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)}
            }
        }
    ]}

    # 執行請求
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()

 # 創建一個 Aspose.Cells icense 對象
license = License()

# 設置 Aspose.Cells 的許可以避免評估限制
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")

export_to_google("Book1.xlsx")

獲得免費的 Aspose.Cells 許可證

您可以獲得免費的臨時許可,並在沒有評估限制的情況下使用 Aspose.Cells for Python。

結論

在本文中,您學習瞭如何使用 Python 將 Excel 數據導出到 Google 表格。我們介紹瞭如何在 Google Cloud 上創建項目、啟用 Google Sheets API、讀取 Excel 文件以及將數據從 Excel 文件導出到 Google Sheets。要探索有關 Aspose.Cells for Python 的更多信息,您可以訪問 文檔。此外,您可以通過我們的 論壇 提問。

也可以看看