• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Python 使用 openpyxl 模組讀取、寫入 Excel 檔案教學與範例

介紹如何在 Python 中使用 openpyxl 模組讀取與寫入 Excel 的 *.xlsx 檔案。


Python 的 openpyxl 模組可用來讀取或寫入 Office Open XML 格式的 Excel 檔案,支援的檔案類型有 xlsx、xlsm、xltx、xltm,以下將示範如何使用 openpyxl 模組來讀取並修改 Excel 檔案。

讀取、寫入 Excel 檔案

若要讀取 Excel 檔案,可以利用 openpyxl 中的 load_workbook 函數:

from openpyxl import load_workbook

# 讀取 Excel 檔案
wb = load_workbook('test.xlsx')

load_workbook 載入 Excel 檔案之後,會得到一個活頁簿(workbook)的物件。

若要將活頁簿物件儲存至 Excel 檔案中,則可使用活頁簿的 save 函數:

# 將活頁簿儲存至 Excel 檔案
wb.save('output.xlsx')

建立新活頁簿

除了從 Excel 檔案讀取活頁簿之外,也可以直接在 Python 建立新的活頁簿:

# 建立新活頁簿
wb2 = Workbook()

工作表操作

一本活頁簿中會包含一張或多張工作表(worksheet),我們可以透過活頁簿的 sheetnames 來取的所有工作表的名稱:

# 顯示工作表名稱
print(wb.sheetnames)
['工作表1', '工作表2']

或是透過 for 迴圈逐一處理每一張工作表:

# 以 for 迴圈逐一處理每張工作表
for sheet in wb:
    print(sheet.title)
工作表1
工作表2

我們可以透過活頁簿的 active 屬性取得目前作用中的工作表:

# 取得目前作用中的工作表
actSheet = wb.active
print(actSheet.title)
工作表1

我們可以透過工作表的名稱,直接取得指定的工作表:

# 透過名稱取得工作表
sheet = wb['工作表1']

工作表的名稱與顏色也都可以任意修改:

# 更改工作表名稱
sheet.title = "我的工作表"

# 更改工作表標籤顏色
sheet.sheet_properties.tabColor = "1072BA"

若要新增工作表,可以使用活頁簿的 create_sheet 函數:

# 新增工作表(放在最後方)
ws1 = wb.create_sheet("新增工作表1")

# 新增工作表(放在最前方)
ws2 = wb.create_sheet("新增工作表2", 0)

若要複製工作表,可以使用活頁簿的 copy_worksheet 函數:

# 複製工作表
source = wb.active
target = wb.copy_worksheet(source)

單一儲存格操作

假設我們的 Excel 內容如下:

Excel 檔案
Excel 檔案

若要讀取表格中的內容,可以先載入這張工作表之後,以儲存格位置來存取資料:

# 讀取 Excel 檔案
wb = load_workbook('test.xlsx')
sheet = wb['工作表1']

# 根據位置取得儲存格
c = sheet['A4']

# 得取儲存格資料
print(c.value)
2018-10-12 00:00:00

取得儲存格之後,也可以修改其中的資料:

# 修改儲存格資料
c.value = "2020-06-23 00:00:00"

另外也可以直接使用工作表搭配位置索引來修改儲存格的資料:

# 修改儲存格資料
sheet['A4'] = "2020-06-23 00:00:00"

除了以文字的 Excel 儲存格位置之外,也可以使用行號與列號來指定儲存格:

# 讀取 Excel 檔案
wb = load_workbook('test.xlsx')
sheet = wb['工作表1']

# 以行號、列號指定儲存格
c = sheet.cell(row=4, column=1)
print(c.value)
2018-10-12 00:00:00
# 修改儲存格內容
sheet.cell(row=4, column=1, value="2020-06-23 00:00:00")

多儲存格操作

若要一次對指定範圍內的所有儲存格進行操作,可以使用以下幾種方式來指定範圍,取得儲存格物件:

# 透過名稱取得工作表
mywb = load_workbook('test.xlsx')
sheet = mywb['工作表1']

# 取得指定範圍內儲存格物件
cellRange = sheet['B2':'C3']

# 以 for 迴圈逐一處理每個儲存格
for row in cellRange:
    for c in row:
        print(c.value)
3
32
4
34

以下是其他各種指定範圍的方式:

# 整個 C 欄
colC = sheet['C']

# C 欄與 D 欄
cols = sheet['C:D']

# 第 10 列
row10 = sheet[10]

# 第 5 列到第 10 列
rows = sheet[5:10]

另外也可以使用工作表的 iter_rows 或 iter_cols 來處理:

# 以列(row)方向逐一疊代處理
for row in sheet.iter_rows(min_row=1, max_col=3, max_row=2):
    for cell in row:
        print(cell)
<Cell '工作表1'.A1>
<Cell '工作表1'.B1>
<Cell '工作表1'.C1>
<Cell '工作表1'.A2>
<Cell '工作表1'.B2>
<Cell '工作表1'.C2>
# 以行(column)方向逐一疊代處理
for col in sheet.iter_cols(min_row=1, max_col=3, max_row=2):
    for cell in col:
        print(cell)
<Cell '工作表1'.A1>
<Cell '工作表1'.A2>
<Cell '工作表1'.B1>
<Cell '工作表1'.B2>
<Cell '工作表1'.C1>
<Cell '工作表1'.C2>

只取得資料

若只需要讀取儲存格中的資料,可以透過工作表的 values 來直接取得資料:

# 只取得儲存格資料
for row in sheet.values:
   for value in row:
       print(value)

工作表的 iter_rows 或 iter_cols 也可以只取用資料:

# 只取得儲存格資料
for row in sheet.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
    for value in row:
       print(value)

除了 openpyxl 之外,常見的 Excel 檔案相關的模組還有 xlwt(寫入 xls 檔案)、xlrd(讀取 xls、xlsx 檔案) 與 xlsxwriter(寫入 xlsx 檔案) 有需要的人可以上網搜尋相關的資料。

參考資料:程式前沿、GeeksForGeeks、StackOverflow、python-excel.org、Real Python

分類:Excel, Python

讀者互動方式

留言

  1. 程式小白 表示:

    2022-04-1813:43:01

    我們可以透過工作表的名稱,直接取得指定的工作表:
    sheet = wb[‘工作表2’]
    應該為:
    actsheet = wb[‘工作表2’]

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide