openpyxl子產品介紹
openpyxl子產品是一個讀寫Excel 2010文檔的Python庫,如果要處理更早格式的Excel文檔,需要用到額外的庫,openpyxl是一個比較綜合的工具,能夠同時讀取和修改Excel文檔。其他很多的與Excel相關的項目基本隻支援讀或者寫Excel一種功能。
安裝openpyxl子產品
openpyxl是一個開源項目,這裡使用如下指令安裝openpyxl子產品
1pip3 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 是一個檔案名,也可以是一個打開的檔案對象。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM0ITMvw1dvwlMvwlM3VWaWV2Zh1WaDdTJwlmc0N3LcRnbllmcv1yb0VXYvwlMyd2bNV2Zh1Wa-cmbw5yMmhzMzQzMmNjYjdDNhVTMtgzMwcTM3MTMvw1cldWYtl2XkF2bsBXdvw1bp5SdoNnbhlmauMXZnFWbp1CZh9GbwV3Lc9CX6MHc0RHaiojIsJye.png)
PS:Workbook和load_workbook相同,傳回的都是一個Workbook對象。
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内拷貝表格
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:移除合并的單元格
PS:從Worksheet對象的屬性和方法可以看到,大部分都是傳回的是一個Cell對象,一個Cell對象代表一個單元格,我們可以使用Excel坐标的方式來擷取Cell對象,也可以使用Worksheet的cell方法擷取Cell對象。
Cell對象
Cell對象比較簡單,常用的屬性如下:
row:單元格所在的行
column:單元格坐在的列
value:單元格的值
coordinate:單元格的坐标
列印表中資料的幾種方式
執行個體
現有如下需求,對每個人送出的表格進行彙總