新建Excel表格
新建Excel表格,默認有一個名為 Sheet 的表格,如下:
1 |
from openpyxl import Workbook |
打開已有的Excel表格
對已有的Excel表格進行操作,如下:
1 |
from openpyxl import Workbook, load_workbook |
新建/獲取Sheet表格
使用 Workbook.create_sheet() 方法新建Sheet表格。第一個參數是sheet名稱,若不填,則默認以 Sheet1 Sheet2 Sheet3 …方式命名;第二個參數是插入Sheet表格的位置,以 0 為第一個位置,若不填,則置於最后。如下:
1 |
ws1 = wb.create_sheet("Mysheet") #默認在最后插入 |
也可以后期隨時修改sheet的名字,如下:
1 |
ws.title = "New Title" |
修改sheet標簽顏色,如下:
1 |
ws.sheet_properties.tabColor = "1072BA" |
若知道sheet的名字,可以用如下方式獲取sheet :
1 |
ws = wb.get_sheet_by_name("New Title") |
也可獲取全部sheet的名字,遍歷sheet名字,如下:
1 |
sheets = wb.sheetnames |
也可以定位到相應sheet頁,[0]為sheet頁索引,如下:
1 |
sheet_names = wb.sheetnames # 獲取所有sheet頁名字 |
復制Sheet表格
僅能復制 單元格的值 樣式 超鏈接 注釋塊 等,而 圖片 和 表格 等是無法復制的,如下:
1 |
source = wb.active |
操作單元格
由 worksheet 獲取單元格,或直接給單元格賦值,如下:
1 |
cell = ws['A4'] #獲取第4行第A列的單元格 |
獲取區域內的單元格,如下:
1 |
cell_range = ws['A1':'C2'] #獲取A1-C2內的區域 |
如果得到單元格,可以賦值,如下:
1 |
cell.value = 'hello, world' |
獲取單元格的值,如下:
1 |
cellValue = ws.cell(row=i, column=j).value |
獲取行列數,如下:
1 |
row = ws.max_row #最大行數 |
一行行的獲取數據,如下:
1 |
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2): |
一列列的獲取數據,如下:
1 |
>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2): |
因為性能的原因, Worksheet.iter_cols() 方法不能在只讀模式下使用。
獲取所有的列或行,如下:
1 |
rows = ws.rows |
因為性能的原因, Worksheet.columns 方法不能在只讀模式下使用。
如果只想從worksheet中獲取值,可以使用 Worksheet.values 屬性,如下:
1 |
for row in ws.values: |
Worksheet.iter_rows() 和 Worksheet.iter_cols() 方法都可以添加 values_only 參數來達到僅獲取值的目的,如下:
1 |
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True): |
保存文件
使用 Workbook.save() 方法保存workbook,這個方法會不加提示的覆蓋原文件,如下:
1 |
wb = Workbook() |
獲取單元格類型
1 |
from openpyxl import Workbook, load_workbook |
使用公式
1 |
from openpyxl import Workbook, load_workbook |
合並單元格
1 |
from openpyxl import Workbook, load_workbook |
插入一個圖片
需要 pillow 庫,安裝如下:
1 |
pip install pillow |
1 |
from openpyxl import load_workbook |
隱藏單元格
1 |
from openpyxl import load_workbook |
優化模式
在處理非常大的 XLSX 文件時,openpyxl 的常規模式無法處理這種負載。幸運的是,有兩種模式可以在(幾乎)恆定內存消耗的情況下讀寫無限量的數據。
只讀模式
1 |
from openpyxl import load_workbook |
只寫模式
1 |
from openpyxl import Workbook |
- 與普通工作簿不同,新創建的只寫工作簿不包含任何工作表;必須使用
create_sheet()方法專門創建工作表。 - 在只寫的工作簿中,只能使用
append()添加行。使用cell()或iter_rows()在任意位置寫(或讀)單元格是不可能的。 - 它能夠導出無限數量的數據(甚至比Excel實際能夠處理的更多),同時將內存使用量保持在10Mb以下。
插入/刪除行/列,移動區域單元格
插入行/列
在第7行之上插入一行,如下:
1 |
ws.insert_rows(7) |
在第7列的左邊插入一列,如下:
1 |
ws.insert_cols(7) |
刪除行/列
從第6列開始,刪除3列,即刪除6、7、8列,如下:
1 |
ws.delete_cols(6, 3) |
移動區域單元格
將 D4:F10 區域向上移動一行向右移動2列,如下:
1 |
ws.move_range("D4:F10", rows=-1, cols=2) |
如果區域內包含 公式 ,則如下方法可以連同公式一起挪動:
1 |
ws.move_range("G4:H10", rows=1, cols=1, translate=True) |
使用 Pandas 和 NumPy
詳情請移步 Working with Pandas and NumPy
圖表
圖表由至少一個系列的一個或多個單元格區域數據點組成。更多內容請移步 圖表介紹
注釋
openpyxl 可讀/寫注釋,但格式信息會被丟失。在 只讀模式 下不支持操作注釋。注釋必須包括 內容 和 作者 。
讀注釋,如下:
1 |
comment = ws["A1"].comment |
寫注釋,如下:
1 |
comment = Comment("Text", "Author") |
表格樣式
字體樣式
字體名稱、字體大小、字體顏色、加粗、斜體、縱向對齊方式(有三種:baseline,superscript, subscript)、下划線、刪除線,如下:
1 |
from openpyxl.styles import Font |
字體顏色可以用 RGB 或 aRGB ,如下:
1 |
font = Font(color="FFBB00") |
繼承並重寫樣式,如下:
1 |
ft1 = Font(name='Arial', size=14) |
填充樣式
詳情請移步 填充樣式
1 |
from openpyxl.styles import PatternFill |
邊框樣式
詳情請移步 邊框樣式
1 |
from openpyxl.styles import Border, Side |
對齊樣式
horizontal 的值有:distributed, justify, center, left, fill, centerContinuous, right, general
vertical 的值有:bottom, distributed, justify, center, top
1 |
from openpyxl.styles import Alignment |
保護樣式
鎖定、隱藏
1 |
from openpyxl.styles import Protection |
整行或整列應用樣式
1 |
col = ws.column_dimensions['A'] |
更改合並的單元格樣式
合並的單元格可以想想成為左上角的那個單元格來操作。
篩選和排序
1 |
from openpyxl import Workbook |
生成的Excel表格,有篩選排序的操作,但是沒有實際表現出效果,如下圖:

需要手動點擊 重寫應用 才能顯示出效果,如下圖:


密碼保護
該功能僅能提供一個很基礎的密碼保護,沒有進行加密處理,網上普通的破解軟件都可以破解密碼。不過,日常使用還是可以的。
該功能僅可用於新建excel表格,不能用於已存在的excel表格。
workbook工作薄保護
防止查看隱藏sheet,避免增加、移動、刪除、隱藏或重命名sheet等操作,可以保護workbook的結構,如下:
1 |
wb.security.workbookPassword = '...' |
worksheet保護
worksheet保護不需要密碼,如下:
1 |
ws = wb.active |
