Python模塊學習 - openpyxl


openpyxl模塊介紹

  openpyxl模塊是一個讀寫Excel 2010文檔的Python庫,如果要處理更早格式的Excel文檔,需要用到額外的庫,openpyxl是一個比較綜合的工具,能夠同時讀取和修改Excel文檔。其他很多的與Excel相關的項目基本只支持讀或者寫Excel一種功能。

安裝openpyxl模塊

  openpyxl是一個開源項目,這里使用如下命令安裝openpyxl模塊
  1. pip3 install openpyxl

openpyxl基本用法

  想要操作Excel首先要了解Excel 基本概念,Excel中列以字幕命名,行以數字命名,比如左上角第一個單元格的坐標為A1,下面的為A2,右邊的B1。
  openpyxl中有三個不同層次的類,Workbook是對工作簿的抽象,Worksheet是對表格的抽象,Cell是對單元格的抽象,每一個類都包含了許多屬性和方法。
操作Excel的一般場景:
  • 打開或者創建一個Excel需要創建一個Workbook對象
  • 獲取一個表則需要先創建一個Workbook對象,然后使用該對象的方法來得到一個Worksheet對象
  • 如果要獲取表中的數據,那么得到Worksheet對象以后再從中獲取代表單元格的Cell對象

Workbook對象

  一個Workbook對象代表一個Excel文檔,因此在操作Excel之前,都應該先創建一個Workbook對象。對於創建一個新的Excel文檔,直接進行Workbook類的調用即可,對於一個已經存在的Excel文檔,可以使用openpyxl模塊的load_workbook函數進行讀取,該函數包涵多個參數,但只有filename參數為必傳參數。filename 是一個文件名,也可以是一個打開的文件對象。
  1. >>> import openpyxl
  2. >>> excel = openpyxl.Workbook(‘hello.xlxs‘)
  3. >>> excel1 = openpyxl.load_workbook(‘abc.xlsx‘)
  4. >>> 
PS:Workbook和load_workbook相同,返回的都是一個Workbook對象。
  Workbook對象提供了很多屬性和方法,其中,大部分方法都與sheet有關,部分屬性如下:
  • active:獲取當前活躍的Worksheet
  • worksheets:以列表的形式返回所有的Worksheet(表格)
  • read_only:判斷是否以read_only模式打開Excel文檔
  • encoding:獲取文檔的字符集編碼
  • properties:獲取文檔的元數據,如標題,創建者,創建日期等
  • sheetnames:獲取工作簿中的表(列表)
  1. >>> import openpyxl
  2. >>> excel2 = openpyxl.load_workbook(‘abc.xlsx‘)
  3. >>> excel2.active
  4. <Worksheet "abc">
  5. >>> excel.read_only
  6. False
  7. >>> excel2.worksheets
  8. [<Worksheet "abc">, <Worksheet "def">]
  9. >>> excel2.properties
  10. <openpyxl.packaging.core.DocumentProperties object>
  11. Parameters:
  12. creator=‘openpyxl‘, title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2006, 9, 16, 0, 0), modified=datetime.datetime(2018, 2, 5, 7, 25, 18), lastModifiedBy=‘Are you SuperMan‘, category=None, contentStatus=None, version=None, revision=None, keywords=None, lastPrinted=None
  13. >>> excel2.encoding
  14. utf-8
  15. >>> 
  Workbook提供的方法如下:
  • get_sheet_names:獲取所有表格的名稱(新版已經不建議使用,通過Workbook的sheetnames屬性即可獲取)
  • get_sheet_by_name:通過表格名稱獲取Worksheet對象(新版也不建議使用,通過Worksheet[‘表名‘]獲取)
  • get_active_sheet:獲取活躍的表格(新版建議通過active屬性獲取)
  • remove_sheet:刪除一個表格
  • create_sheet:創建一個空的表格
  • copy_worksheet:在Workbook內拷貝表格
  1. >>> excel2.get_sheet_names()
  2.  
  3. Warning (from warnings module):
  4.   File "__main__", line 1
  5. DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames).
  6. [‘abc‘, def‘]
  7. >>> excel2.sheetnames
  8. [‘abc‘, def‘]
  9. >>> excel2.get_sheet_by_name(‘def‘)
  10.  
  11. Warning (from warnings module):
  12.   File "__main__", line 1
  13. DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  14. <Worksheet "def">
  15. >>> excel2[‘def‘]
  16. <Worksheet "def">
  17. >>> excel2.get_active_sheet()
  18.  
  19. Warning (from warnings module):
  20.   File "__main__", line 1
  21. DeprecationWarning: Call to deprecated function get_active_sheet (Use the .active property).
  22. <Worksheet "abc">
  23. >>> excel2.create_sheet(‘ghk‘)
  24. <Worksheet "ghk">

Worksheet對象

  有了Worksheet對象以后,我們可以通過這個Worksheet對象獲取表格的屬性,得到單元格中的數據,修改表格中的內容。openpyxl提供了非常靈活的方式來訪問表格中的單元格和數據,常用的Worksheet屬性如下:
  • title:表格的標題
  • dimensions:表格的大小,這里的大小是指含有數據的表格的大小,即:左上角的坐標:右下角的坐標
  • max_row:表格的最大行
  • min_row:表格的最小行
  • max_column:表格的最大列
  • min_column:表格的最小列
  • rows:按行獲取單元格(Cell對象) - 生成器
  • columns:按列獲取單元格(Cell對象) - 生成器
  • freeze_panes:凍結窗格
  • values:按行獲取表格的內容(數據)  - 生成器
PS:freeze_panes,參數比較特別,主要用於在表格較大時凍結頂部的行或左邊的行。對於凍結的行,在用戶滾動時,是始終可見的,可以設置為一個Cell對象或一個端元個坐標的字符串,單元格上面的行和左邊的列將會凍結(單元格所在的行和列不會被凍結)。例如我們要凍結第一行那么設置A2為freeze_panes,如果要凍結第一列,freeze_panes取值為B1,如果要同時凍結第一行和第一列,那么需要設置B2為freeze_panes,freeze_panes值為none時 表示 不凍結任何列。
  常用的Worksheet方法如下:
  • iter_rows:按行獲取所有單元格,內置屬性有(min_row,max_row,min_col,max_col)
  • iter_columns:按列獲取所有的單元格
  • append:在表格末尾添加數據
  • merged_cells:合並多個單元格
  • unmerged_cells:移除合並的單元格
  1. >>> for row in excel2[‘金融‘].iter_rows(min_row=2,max_row=4,min_col=2,max_col=4):
  2.         print(row)
  3.  
  4. (<Cell abc‘.B2>, <Cell abc‘.C2>, <Cell abc‘.D2>)
  5. (<Cell abc‘.B3>, <Cell abc‘.C3>, <Cell abc‘.D3>)
  6. (<Cell abc‘.B4>, <Cell abc‘.C4>, <Cell abc‘.D4>)
PS:從Worksheet對象的屬性和方法可以看到,大部分都是返回的是一個Cell對象,一個Cell對象代表一個單元格,我們可以使用Excel坐標的方式來獲取Cell對象,也可以使用Worksheet的cell方法獲取Cell對象。
  1. >>> excel2[‘abc‘][‘A1‘]
  2. <Cell abc‘.A1>
  3. >>> excel2[‘abc‘].cell(row=1,column=2)
  4. <Cell abc‘.B1>
  5. >>> 

Cell對象

  Cell對象比較簡單,常用的屬性如下:
  • row:單元格所在的行
  • column:單元格坐在的列
  • value:單元格的值
  • coordinate:單元格的坐標
  1. >>> excel2[‘abc‘].cell(row=1,column=2).coordinate
  2. B1
  3. >>> excel2[‘abc‘].cell(row=1,column=2).value
  4. test
  5. >>> excel2[‘abc‘].cell(row=1,column=2).row
  6. 1
  7. >>> excel2[‘abc‘].cell(row=1,column=2).column
  8. B

打印表中數據的幾種方式

  1. # ---------- 方式1 ----------
  2. >>> for row in excel2[‘abc‘].rows:
  3.         print( *[ cell.value for cell in row ])
  4.  
  5.  
  6.  
  7. # ---------- 方式2 ----------
  8. >>> for row in excel2[‘abc‘].values:
  9.         print(*row)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM