1. 程式人生 > 程式設計 >Python自動化辦公Excel模組openpyxl原理及用法解析

Python自動化辦公Excel模組openpyxl原理及用法解析

openpyxl 介紹

openpyxl 是一個直接可用於讀寫 xlsx 、xlsm、xltx、xltm 檔案的 Python 內建庫,藉助它可以利用 Python 語法對本地 xlsx 檔案進行自動化批量操作

先說一下安裝部分,如果小夥伴們用 Anaconda 作為 Python 環境的話,openpyxl 無需安裝可直接使用;需要安裝的話方法也非常簡單 pip 工具一行命令即可

pip install openpyxl

xlsx 檔案屬性

在對 Excel 表格處理之前,需要了解一下 xlsx 檔案的幾個名詞解釋及構造

1,Workbook 指的是神什麼?

Workbook 名叫工作薄,可以代指一個 xlsx 檔案;

2, sheet、cell、row 、col 分別指的是什麼?

關於問題2 ,可參考下圖(見註釋)

Python自動化辦公Excel模組openpyxl原理及用法解析

openpyxl 基本命令操作

1, 建立 一個空的 workbook

from openpypl import Wrokbook
from openpyxl.utils import get_column_letter

wb = Workbook()
ws1 = wb.active

一個 Workbook 預設至少含有一個 worksheet ,通過命令 Workbook.active 來獲取當前第一個 sheet(也就是第一個 sheet);

2,建立新的 worksheet

ws1 = wb.create_sheet("Mysheet") # insert at the end (default)

ws2 = wb.create_sheet("Mysheet",0) # insert at first position
# or
ws3 = wb.create_sheet("Mysheet",-1) # insert at the penultimate position

可通過 create_sheet() 命令建立新的 worksheet , create_sheet 預設有兩個引數 name、index;

  • name,定義 sheet 的名字;
  • index,來設定插入 sheet 的位置,預設為 None 即新建立的 sheet 插入到最後面;0 代表插入第一個 sheet 的位置;

3,更改 sheet 的名字

一行程式碼即可

ws.title = 'New Title'

4,更改 sheet 上 tab 背景顏色

ws.sheet_properties.tabColor = "1072BA"

通過修改 Wroksheet.sheet_properties.tabColor 引數即可,需要注意的是這裡只接收 RRGGBB 顏色程式碼;

關於不清楚 sheet tab 背景顏色不清楚是什麼的小夥伴,可參考下圖;

Python自動化辦公Excel模組openpyxl原理及用法解析

5,返回 Workbook 中所有 sheet 的名字

通過 Workbook.sheetname 命令即可檢視

>>> print(wb.sheetnames)
['Sheet2','New Title','Sheet1']

# 或者用迭代方法

>>> for sheet in wb:
... print(sheet.title)

6,將現有的 worksheets 複製新建立的 workbook 中

可通過 Workbook.copy_worksheet()函式方法

# 將 source 中的worksheet複製到 target 中去

source = wb.active
target = wb.copy_worksheet(source)

需要注意的是,當 workbook 為只讀或 只寫模式時不可複製;另外只有 cells(值,樣式,超連結、註釋) 和 特定的 worksheet 屬性(維度、格式、屬性)可以複製,其他的一些 workbook / worksheet 屬性不可複製( Images Charts 等)

7,獲取某個 cell 的資料

成功建立完 Workbook、Worksheet 之後,接下來就可以修改 cell(單元格中的內容,Cells 可以通過 worksheet 中特有關鍵詞來獲取

>>> c = ws['A4'] # 獲取第4行列名為A 單元格中的值
通過賦值命令對其修改

ws['A4'] = 4

openpyxl 中有一個函式 Worksheet.cell() 可修改單元格中的資料,可定位到具體行、具體列進行更改,

d = ws.cell(row = 4,columns = 2,value = 10)

  • row 表示指定行
  • columns 表示指定列
  • value 表示該單元格中需替代的資料值;當此引數不設定時表示只對該 cell 建立記憶體空間,不賦值

例如

>>> for x in range(1,101):
... for y in range(1,101):
... ws.cell(row=x,column=y)

8,獲取多個單元格

8.1,openpyxl 也可以進行切片操作,來獲取多個單元格

>>> cell_range = ws['A1':'C2']

8.2, worksheet 中多行多列資料獲取方式相似

>>> colC = ws['C']
>>> col_range = ws['C:D']
>>> row10 = ws[10]
>>> row_range = ws[5:10]

8.3,Worksheet.iter_row() 來獲取 sheet 中行列範圍,再利用迴圈迭代獲取每一個單元格資料

>>> for row in ws.iter_rows(min_row=1,max_col=3,max_row=2):
... for cell in row:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>

8.4,Worksheet.iter_cols() 也可以實現同樣功能

>>> for col in ws.iter_cols(min_row=1,max_row=2):
... for cell in col:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2>

需要注意的時在 read-only 模式中,Worksheet,iter_cols() 方法不能使用

9,只檢視 cell 中的 value

9.1,只檢視 worksheet 中的 value 時,可通過 Worksheet.values 屬性,該屬性將迭代 worksheet 中所有行,但返回的僅僅是 cell values

for row in ws.values:
for value in row:
print(value)

9.2,通過 Worksheet.iter_rows() 和 Worksheet.iter_cols() 也可以實現,在函式中加入一個引數 values_only = True 即可返回 cell 的值

>>> for row in ws.iter_rows(min_row=1,max_row=2,values_only=True):
... print(row)

(None,None,None)
(None,None)

10,讀寫檔案操作

10,excel 檔案載入

openpyxl.load_workbook() 函式來開啟一個指定本地儲存的 xlsx 檔案

>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.sheetnames
['Sheet2','Sheet1']

10.2,excel 檔案儲存

Workbook 修改成功後,後建立完成之後,通過Workbook.save(path) 命令即可儲存至本地磁碟

>>> wb = Workbook()
>>> wb.save('balances.xlsx')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。