Python openpyxl 庫

openpyxl 庫


簡介


openpyxl 是一個用于讀取/寫入 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 庫

Excel 文件


這里介紹下一些基本定義:Excel 電子表格文檔稱為工作簿。單個工作簿保存在擴展名為 .xlsx 的文件中。每個工作簿可以包含多個工作表。

安裝 openpyxl 模塊


openpyxl 是一個第三方模塊,當要用于處理 Excel 文件時,須先安裝。使用以下的命令進行安裝

$ pip install openpyxl

創(chuàng)建工作簿


可以通過導入 openpyxl 的 Workbook 類來創(chuàng)建工作簿(workbook)。例如:

>>> from openpyxl import Workbook
>>> wb = Workbook()

創(chuàng)建工作簿后,至少有一個工作表(worksheet)??梢允褂?Workbook.active 屬性來獲?。?/p>

>>> ws = wb.active

默認情況下,這個方法獲取的是第一個工作表

創(chuàng)建新的工作表 ,可以使用 Workbook.create_sheet() 方法:

>>> ws1 = wb.create_sheet('Mysheet')
>>> ws2 = wb.create_sheet('Mysheet', 0)
>>> ws3 = wb.create_sheet('Mysheet', -1)

創(chuàng)建新工作表的時候,會自動賦予一個名字。會按照(Sheet,Sheet1,Sheet2)這樣的順序依次賦值 。不過能夠通過 Worksheet.title 屬性來修改這個名稱。

ws.title = "New Title"

如果想要查看一個工作簿中所有工作表的名稱,可以通過 Workbook.sheetname 屬性來進行查看:

>>> wb.sheetnames
['Mysheet1', 'New Title', 'Mysheet2', 'Mysheet']

當然也可以用循環(huán)遍歷的方式:

>>> for sheet in wb:
...     print(sheet)
...
<Worksheet "Mysheet1">
<Worksheet "New Title">
<Worksheet "Mysheet2">
<Worksheet "Mysheet">

處理數據


當創(chuàng)建完工作簿以及工作表后,現在就可以考慮修改單元格的內容。單元格能夠作為工作表的鍵直接訪問:

>>> c = ws['A1']

這個時候,將會返回 A1 處單元格,如果不存在的話,則創(chuàng)建一個。這個時候,可以直接賦值:

>>> ws['A1'] = 3

除了用這種大寫字母(表示列)加數字(表示行)的形式來訪問單元格。

還可以通過 Worksheet.cell()方法直接使用行和列的表示法來訪問單元格:

>>> a = ws.cell(row=3, column=1, value=8)

訪問多個單元格

當需要訪問多個單元格的時候,可以使用切片的方法。當訪問一個區(qū)域可以參考如下寫法:

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

當訪問多行或多列時,可以使用如下的方法:

>>> col_c =  ws['C']
>>> col_range = ws['C':'D']
>>> row_10 = ws[10]
>>> row_range = ws[5:10]

除了使用上面切片的方法。同樣可以使用 Worksheet.iter_rows() 方法訪問,這個方法將逐行返回:

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

同樣的,還有 Worksheet.iter_cols() 方法,這個方法將逐列返回:

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

這里有需要注意的地方,Worksheet.iter_cols 方法在只讀模式下不可用。

如果需要遍歷的是文件中所有的行或列,則可以考慮 Worksheet.rows 屬性:

>>> ws = wb.active
>>> ws['C4'] = 'Hello World!'
>>> tuple(ws.rows)
((<Cell 'Mysheet1'.A1>, <Cell 'Mysheet1'.B1>, <Cell 'Mysheet1'.C1>),
 (<Cell 'Mysheet1'.A2>, <Cell 'Mysheet1'.B2>, <Cell 'Mysheet1'.C2>),
 (<Cell 'Mysheet1'.A3>, <Cell 'Mysheet1'.B3>, <Cell 'Mysheet1'.C3>),
 (<Cell 'Mysheet1'.A4>, <Cell 'Mysheet1'.B4>, <Cell 'Mysheet1'.C4>))

或者 Worksheet.columns 屬性:

>>> tuple(ws.columns)
((<Cell 'Mysheet1'.A1>,
  <Cell 'Mysheet1'.A2>,
  <Cell 'Mysheet1'.A3>,
  <Cell 'Mysheet1'.A4>),
 (<Cell 'Mysheet1'.B1>,
  <Cell 'Mysheet1'.B2>,
  <Cell 'Mysheet1'.B3>,
  <Cell 'Mysheet1'.B4>),
 (<Cell 'Mysheet1'.C1>,
  <Cell 'Mysheet1'.C2>,
  <Cell 'Mysheet1'.C3>,
  <Cell 'Mysheet1'.C4>))

返回單元格的值


如果只是需要返回工作表中單元格的值,可以使用 Worksheet.values 屬性。

該方法將遍歷工作表中所有行,但僅返回單元格中的值。

>>> for row in ws.values:
...     for value in row:
...         print(value)
...
None
None
None
None
None
None
None
None
None
Hello World!
None
Hello World!

保存數據到文件中


保存工作簿,可以使用 Workbook 對象的 Workbook.save() 方法:

>>> wb.save('temp.xlsx')

打開保存的文件,可以看到,下面的工作表名,正是上面創(chuàng)建的表名。

文件信息

以及上面使用方法插入表格中的內容。

表格內容

加載文件


當加載文件,可以使用 openpyxl.load_workbook() 方法來打開一個本地存在的文件:

>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('temp.xlsx')
>>> wb2.sheetnames
['Mysheet1', 'New Title', 'Mysheet2', 'Mysheet']

補充


插入時間

>>> import datetime
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('temp.xlsx')
>>> ws = wb2.active
>>> ws.title
'Mysheet1'
>>> ws['A1'] = datetime.datetime.now()
>>> ws['A1'].value
datetime.datetime(2020, 3, 29, 16, 29, 21, 786731)
>>> ws['A1'].number_format
'yyyy-mm-dd h:mm:ss'

使用公式

可以直接將 Excel 的公式,用字符串的格式賦值給某個單元格,如下:

>>> ws['A2'] = '=SUM(1,1)'
>>> ws['A2'].value
'=SUM(1,1)'

合并/拆分單元格

當需要合并和拆分單元格時,可以使用 worksheet.merge_cells() 方法以及 worksheet.unmerge_cells() 方法:

>>> ws.merge_cells('A2:B2')
>>> # 先將 A3:B3 合并,再嘗試拆分
... ws.merge_cells('A3:B3')
>>> ws.unmerge_cells('A3:B3')

加載圖像

這一步依賴 Pillow 庫,所以使用之前需要先安裝 Pillow 庫。

>>> from openpyxl.drawing.image import Image
>>> img = Image('k.jpg')
>>> ws.add_image(img, 'A5')
>>> wb.save('temp_1.xlsx')

以上用法結果展示

簡單用法-結果展示

在這張圖片可以看到,A1 插入的時間已經生效。

A2 顯示的結果是 2,紅色標記的部分,表示這個結果是用這個公式得到的結果,也就說明公式插入也是生效的。

同時可以看到,A2:B2 單元格已經合并。

最后是插入圖片,可以看到在 A5 單元格,成功插入了一張圖片。


以上內容就是關于 openpyxl 庫對 Excel 文件進行處理的簡單用法。


歡迎關注微信公眾號《書所集錄》

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在這一小節(jié),我們將會學習如何使用Python來操作Excel文檔以及如何利用Python語言的函數和表達式操縱Ex...
    11的霧閱讀 3,259評論 0 19
  • openpyxl官方手冊 教程 Tutorial 創(chuàng)建excel文件 Create a workbook Ther...
    老年程序員閱讀 115,972評論 2 41
  • 最近在網上爬取奧運項目資料,并寫入Excel中。在寫到Excel中是用到了OpenPyXL,翻譯了一部分自己用到的...
    LeeLom閱讀 201,366評論 7 78
  • 用openpyxl操作excel表格 openpyxl 是一個用來操作excel 2010 的xlsx/xlsm的...
    stone46閱讀 7,650評論 0 17
  • 大家都說XSS是一門又熱門又不太受重視的Web攻擊手法,因為其耗時間、有一定幾率不成功、沒有相應的軟件來完成自動化...
    vermouth_Fee閱讀 670評論 0 1

友情鏈接更多精彩內容