天天看點

Python子產品學習 - openpyxl

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 是一個檔案名,也可以是一個打開的檔案對象。

Python子產品學習 - openpyxl

PS:Workbook和load_workbook相同,傳回的都是一個Workbook對象。

Workbook對象提供了很多屬性和方法,其中,大部分方法都與sheet有關,部分屬性如下:

active:擷取目前活躍的Worksheet

worksheets:以清單的形式傳回所有的Worksheet(表格)

read_only:判斷是否以read_only模式打開Excel文檔

encoding:擷取文檔的字元集編碼

properties:擷取文檔的中繼資料,如标題,建立者,建立日期等

sheetnames:擷取工作簿中的表(清單)

Python子產品學習 - openpyxl

Workbook提供的方法如下:

get_sheet_names:擷取所有表格的名稱(新版已經不建議使用,通過Workbook的sheetnames屬性即可擷取)

get_sheet_by_name:通過表格名稱擷取Worksheet對象(新版也不建議使用,通過Worksheet['表名']擷取)

get_active_sheet:擷取活躍的表格(新版建議通過active屬性擷取)

remove_sheet:删除一個表格

create_sheet:建立一個空的表格

copy_worksheet:在Workbook内拷貝表格

Python子產品學習 - openpyxl

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:移除合并的單元格

Python子產品學習 - openpyxl

PS:從Worksheet對象的屬性和方法可以看到,大部分都是傳回的是一個Cell對象,一個Cell對象代表一個單元格,我們可以使用Excel坐标的方式來擷取Cell對象,也可以使用Worksheet的cell方法擷取Cell對象。

Python子產品學習 - openpyxl

Cell對象

Cell對象比較簡單,常用的屬性如下:

row:單元格所在的行

column:單元格坐在的列

value:單元格的值

coordinate:單元格的坐标

Python子產品學習 - openpyxl

列印表中資料的幾種方式

Python子產品學習 - openpyxl

執行個體

  現有如下需求,對每個人送出的表格進行彙總