官术网_书友最值得收藏!

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 導入圖表并繪制數據

主站蜘蛛池模板: 宁都县| 广南县| 来安县| 大英县| 聂荣县| 彩票| 太保市| 广汉市| 开平市| 乐清市| 花莲市| 田林县| 凤台县| 汉中市| 衡水市| 宜君县| 沅江市| 汪清县| 武功县| 金乡县| 牙克石市| 祁连县| 灌阳县| 吴堡县| 长宁区| 自治县| 松阳县| 岑巩县| 威宁| 东明县| 新化县| 隆昌县| 汶川县| 西城区| 东乡县| 乐业县| 万州区| 哈密市| 叶城县| 昂仁县| 德钦县|