- Python數據分析從入門到精通
- 李梓萌編著
- 1592字
- 2020-09-18 18:05:51
4.2 使用openpyxl處理Office文件

在Python程序中可使用第三方模塊將數據轉換成Office格式。例如使用openpyxl模塊可以讀寫Excel文件,包括xlsx、xlsm、xltx和xltm格式。在使用openpyxl之前需要先通過如下命令進行安裝。

4.2.1 openpyxl基礎
在openpyxl中主要用到如下3個概念。
● Workbook:表示一個Excel工作表。
● Worksheet:表示工作表中的一張表頁。
● Cells:表示一個單元格。
openpyxl模塊是圍繞著上述3個概念實現本身功能的,其本身的使用流程也是結合上述3個概念進行的:首先打開Workbook,然后定位Sheet,最后操作Cell。
(1)Workbook對象
因為一個Workbook對象代表一個Excel文檔,所以在操作Excel文檔之前需要先創建一個Workbook對象。使用openpyxl創建Excel文件的方法十分簡單,只需直接調用類Workbook即可創建一個新的Excel文檔。
如果已經存在Excel文檔,可使用openpyxl模塊中的函數load_workbook讀取Excel文檔。雖然函數load_workbook有多個參數,但只有參數filename為必需參數,即代表一個文件名,也可以是一個打開的文件對象。
在Workbook對象中提供了許多與Sheet有關的屬性和方法,具體說明如下。
● active:獲取當前活躍的Worksheet。
● worksheets:以列表的形式返回所有的Worksheet(表格)。
● read_only:判斷是否以read_only模式打開Excel文檔。
● encoding:獲取文檔的字符集編碼。
● properties:獲取文檔的元數據,如標題,創建者,創建日期等。
● sheetnames:獲取工作簿中的表(列表)。
在Workbook中,常用的內置方法如下所示。
● get_sheet_names:獲取所有表格的名稱(新版不建議使用,通過Workbook的sheetnames屬性即可獲?。?。
● get_sheet_by_name:通過表格名稱獲取Worksheet對象(新版不建議使用,通過Worksheet[‘表名‘]獲?。?。
● get_active_sheet:獲取活躍的表格(新版本建議通過active屬性獲取)。
● remove_sheet:刪除一個表格。
● create_sheet:創建一個空白表格。
● copy_worksheet:在Workbook內復制表格。
(2)Worksheet對象
有了Worksheet對象以后,可通過Worksheet對象獲取表格屬性,得到單元格中的數據,修改表格中的內容。openpyxl模塊提供了非常靈活的方式來訪問表格中的單元格和數據,其中最為常用的Worksheet屬性如下。
● title:表格標題。
● dimensions:表格大小,指含有數據的表格大小,即左上角的坐標右下角的坐標如A1:C3。
● max_row:表格最大行。
● min_row:表格最小行。
● max_column:表格最大列。
● min_column:表格最小列。
● rows:按行獲取單元格(Cell對象)生成器。
● columns:按列獲取單元格(Cell對象)生成器。
● freeze_panes:凍結窗格。
● values:按行獲取表格的內容(數據),生成器。
在上述屬性中,屬性freeze_panes的主要功能是,當表格較大時凍結頂部的行或左邊的行。在用戶滾動時凍結的行始終可見。同時可將凍結行設置為一個Cell對象或一個表示單元格坐標的字符串,在這個單元格上面的行和左邊的列將會被凍結(單元格所在的行和列不會被凍結)。假設存在一個名為template.xls的Excel文件,包含Sheet1、Sheet2和Sheet3,另外在Sheet3中輸入如圖4-4所示的數據。

圖4-4 名為template.xls的Excel文件
如要凍結第一行,只需設置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:移除合并的單元格。
(3)Cell對象
Cell對象比較簡單,常用的屬性如下。
● row:單元格所在的行。
● column:單元格所在的列。
● value:單元格的值。
● coordinate:單元格的坐標。
4.2.2 使用openpyxl讀取Excel文件的數據
在下面的實例文件office01.py中,演示了使用openpyxl讀取指定Excel文件數據的過程。
源碼路徑:daima\4\4-2\office01.py

執行后會輸出:

4.2.3 將4組數據導入Excel文件
在下面的實例文件office02.py中,演示了將4組數據導入Excel文件中的過程。
源碼路徑:daima\4\4-2\office02.py


執行后在指定文件template.xlsx中顯示導入的4組數據,如圖4-5所示。

圖4-5 導入的4組數據
4.2.4 在Excel文件中檢索某關鍵字數據
在下面的實例文件office03.py中,演示了在指定Excel文件中檢索某關鍵字數據的過程。
源碼路徑:daima\4\4-2\office03.py

執行后可以通過輸入關鍵字的方式快速查詢Excel文件中的數據,如下面的檢索過程。

4.2.5 將數據導入Excel文件并生成一個圖表
在下面的實例文件office04.py中,演示了將指定數據導入Excel文件中,并根據導入的數據在Excel文件中生成一個圖表的過程。
源碼路徑:daima\4\4-2\office04.py

執行后將rows中的數據導入文件area.xlsx中,并在文件area.xlsx中根據數據繪制一個圖表。如圖4-6所示。

圖4-6 導入圖表并繪制數據