日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1 前言

最近需要頻繁讀寫 Excel 文件,想通過程序對 excel 文件進行自動化處理,發現使用 Python/ target=_blank class=infotextkey>Python 的 openpyxl 庫進行 excel 文件讀寫實在太方便了,結構清晰,操作簡單。本文對 openpyxl 的使用進行總結,主要包含以下內容:

  • openpyxl 的介紹及 excel 文件結構說明
  • 工作表的讀寫處理
  • 行列的讀寫處理
  • 單元格的讀寫處理
用python處理excel文件有多輕松?工作從未如此簡單

 

2 openpyxl 及 excel 文件結構

openpyxl 是一個對 xlsx/xlsm/xltx/xltm 格式的 2010 excel 文檔進行讀寫的 python 庫。它官網有詳細的文檔介紹。在進行使用前,需先安裝并引入

# 安裝
pip install openpyxl
# 引入openpyxl 模塊
import openpyxl
復制代碼

在進行 excel 操作之前,先對 excel 的文件結構做一個簡單了解,以便于熟悉后續的操作。

這里說一句,小編是一名python開發工程師,我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,并在后臺私信小編:“01”即可領取。非誠勿擾!

如下圖:

用python處理excel文件有多輕松?工作從未如此簡單

 

一個 excel 文件,其內容按層次分為工作簿(文件) -> 工作表(sheet) -> 行列 -> 單元格 ,對應上圖,整個 excel 文件即是一個工作簿;工作簿下可以有多個工作表(如圖中的 Sheet1/test1 等等);工作表中就是對應的表格數據,分為行和列,行是用序號表示,列用大寫字母表示(也可用序號);行與列的交點就是每一個存儲數據的單元格。因此,我們對 excel 表格進行讀寫,基本按這個層次思路來操作:讀入文件,找到工作表,遍歷行列,定位單元格,對單元格進行讀寫。因此,會涉及到工作表、行列、單元格的讀寫操作。這些操作之前,需要先把文件加載進來,一個 excel 文件就是一個工作簿 (workbook),加載操作如下(示例中的 excel 文件為 text.xlsx):

# 加載excel文件
file_path = "E:/pythontest/test.xlsx"
workbook = openpyxl.load_workbook(file_path)
復制代碼

3 工作表處理

3.1 工作表讀取

工作表( sheet )會有多個,可以讀取全部的工作表,讀取單個時,可以按 sheet 名稱讀取,也可以按下標(下標從0開始)。

  • 全部工作表對象:workbook.worksheets
  • 全部工作表名稱:workbook.sheetnames
  • 按名稱(sheet_name)獲取工作表:workbook[sheet_name]
  • 按下標(i從0開始)獲取工作表:workbook.worksheets[i]
  • 獲取正在使用的工作表:workbook.active
  • 獲取工作表的屬性(如工作表名稱、最大行數和列數等):sheet.title、sheet.max_row、sheet.max_column
用python處理excel文件有多輕松?工作從未如此簡單

 

如下:

# 全部sheet對象
>>> workbook.worksheets
[<Worksheet "Sheet1">, <Worksheet "test1">, <Worksheet "test2">]
# 全部sheet名稱
>>> workbook.sheetnames
['Sheet1', 'test1', 'test2']
# 按名稱讀取sheet
>>> workbook["Sheet1"]
<Worksheet "Sheet1">
# 按下標讀取
>>> workbook.worksheets[0]
<Worksheet "Sheet1">
# 獲取當前正在使用的sheet
>>> workbook.active
<Worksheet "Sheet1">
# 獲取sheet的屬性
>>> sheet_active.title
Sheet1
>>> sheet_active.max_row
6
>>> sheet_active.max_column
3
復制代碼

3.2 工作表添加

若需要新增工作表,按操作流程,先添加工作表,再保存文件。創建通過create_sheet完成,創建后保存(save)文件,添加才能生效。

  • 創建工作表,若名稱相同,則自動進行重命名:workbook.create_sheet("test3")
  • 在指定的下標創建工作表:workbook.create_sheet("test4",1)
  • 保存文件,若文件路徑與打開的文件路徑相同,則覆蓋;不同,則會復制原文件并保存(相當于另存為):workbook.save(file_path)

3.3 工作表修改

要修改工作表名稱,直接通過設置工作表的 title 即可,修改后同樣需要保存文件。

# 修改工作表名稱
>>> sheet1 = workbook['test1']
>>> sheet1.title = 'test11'
# 保存文件
>>> workbook.save(file_path)
復制代碼

3.4 工作表刪除

刪除工作表,需要先獲取 sheet 對象,然后刪除。刪除有兩種方式,一是使用 workbook 提供的 remove 方法,也可以直接使用 python 的del進行刪除。刪除操作后,同樣需要保存文件:

# remove刪除工作表
sheet = workbook["test-1"]
workbook.remove(sheet)
# del操作刪除
del workbook["test2"]
# 保存文件
workbook.save(file_path)
復制代碼

4 行列處理

獲取 sheet 對象后,后續即可進行行列操作,包括行列讀取,添加,刪除等。

4.1 讀行列

  • 獲取全部行和列,然后可以進行遍歷:sheet.rows ,sheet.columns
  • 讀取部分行列:讀一行sheet[1],讀多行sheet[2:3],讀一列sheet['A'],讀多列sheet['B:C']
# 遍歷全部行
>>> for row in sheet.rows:
...    print(row)
...
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>)
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>)
....
# 讀取部分行列
>>> sheet[1]
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>)
>>> sheet["A:B"]
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>, <Cell 'Sheet1'.A5>, <Cell 'Sheet1'.A6>), (<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>))
復制代碼

4.2 添加行列

添加行列,可以指定位置添加單個行列或多個行列。

  • 直接在工作表中追加行數據:sheet.Append(rowdata)
  • 在指定 index(從1開始計算) 位置添加行列:sheet.insert_rows,sheet.insert_cols
# 在第4行插入1行空行
>>> sheet.insert_rows(4)
# 在第2行插入2行空行
>>> sheet.insert_rows(idx=2,amount=2)
# 添加一行數據到表
>>> row_data = ["tom", 15, "tom@test.com"]
>>> sheet.append(row_data)
# 保存修改內容
>>> workbook.save(file_path)
復制代碼

4.3 刪除行列

刪除操作與插入行列操作方式一致,使用delete_rows及delete_cols方法。

# 刪除行
>>> sheet.delete_rows(2,2)
>>> workbook.save(file_path)
復制代碼

5 單元格處理

我們的數據最終是保存在每一個單元格(Cell)中,因此,最終我們操作數據其實就是單元格中的數據,單元格中,openpyxl 使用是 Cell 對象。前面在遍歷行列數據時,可以看到輸出<Cell 'Sheet1'.A1>的內容,這對應的單元格對象。下面對單元格的操作進行說明。

5.1 獲取單元格數據值及屬性值

定位獲取單元格有兩種方式:

  • 直接指定行列名:sheet[A1]
  • 使用 cell 函數(行列下標從1開始):sheet.cell(row=2,column=1)
# 指定行列坐標獲取單元格
>>> sheet["A1"]
<Cell 'Sheet1'.A1>
# cell函數獲取單元格
>>> sheet.cell(row=1, column=1)
<Cell 'Sheet1'.A1>
復制代碼

獲取單元格對象后,可以獲取數據值及其屬性,包括它所在的行列數,坐標,值等。

>>> cell = sheet["A2"]
>>> cell.value
'張三'
>>> cell.coordinate
'A2'
>>> cell.column
1
>>> cell.row
2
復制代碼

5.2 移動單元格

通過對單元格區域,可以向上、下、左、右進行移動,使用的是move_range(range,rows,cols),其中 rows 和 cols 為整數,正整數表示向下或向右,負整數為向上或向左。

# 移動數據區域(向上移動2行,向右移動3列),正整數為向下或向右,負整數為向上或向左
sheet.move_range("A3:C3", rows=-2, cols=3)
wb.save(file_path)
復制代碼

5.3 合并拆分單元格

對于跨行和跨列,需要對單元格進行合并,使用的是merge_cells(range_string, start_row, start_column, end_row, end_column)。如果要合并的單元格都有數據,只會保留左上角的數據,其他則丟棄。合并及拆分都可以通過行列坐標(如A1)或者行列下標(如1,2)進行。

# 單元格合并,使用范圍坐標
sheet.merge_cells("A2:B3")
# 單元格合并,指定行列下標(下標從1開始)
sheet.merge_cells(start_row=5, start_column=3, end_row=7, end_column=4)
wb.save(file_path)
# 拆分單元格
sheet.unmerge_cells("A2:B3")
sheet.unmerge_cells(start_row=5, start_column=3, end_row=7, end_column=4)
# 保存文件
wb.save(file_path)
復制代碼

5.4 寫入單元格

對單元格值進行修改和寫入,直接對cell.value進行賦值即可。這里需要注意的是,可以寫入 excel 公式,具體公式與 excel 中用到公式一致,另外,若是寫入公式,讀取時獲取到的 value 值也是公式,而非公式值。

# 寫入值
cell.value = "張三"
# 寫入公式(求平均值)
cell.value = "=AVERAGE(B2:B6)"
復制代碼

5.5 設置單元格格式

單元格的格式包括行高,列寬,字體、邊框、對齊方式、填充顏色等。這些都在 openpyxl 的 styles 模塊中。

  • 行高/列寬:row_dimensions[row_num].height = xx,sheet.column_dimensions[col_name].width = xx
  • 字體( Font 對象):包括字段名稱,大小、加粗、斜體、顏色等,Font(name="微軟雅黑", size=20, bold=True, italic=True, color="000000")
  • 邊框( Border 對象和 Side 對象):邊框每一條邊的格式大小/顏色Side(style="thin", color="000000"),通過邊構建邊框對象:Border(left=side, right=side, top=side, bottom=side)
  • 對齊( Alignment 對象):垂直和水平對齊方向,是否自動換行。Alignment(horizontal="center", vertical="center", wrap_text=True)
  • 填充顏色,分為普通顏色填充和漸變顏色填充:PatternFill(fill_type="solid", fgColor="FF0000")和 GradientFill(stop=("FF0000", "FD1111", "000000"))
# 設置行高和列寬
sheet.row_dimensions[1].height = 50
sheet.column_dimensions["A"].width = 20
# 設置單元格字體
cell = sheet["A1"]
current_font = cell.font
font = Font(name="微軟雅黑", size=20, bold=True, italic=True, color="000000")
cell.font = font
# 設置邊框(細邊,黑色)
side_style = Side(style="thin", color="000000")
border = Border(left=side_style, right=side_style, top=side_style, bottom=side_style)
cell.border = border
# 居中對齊,自動換行
cell_alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
cell.alignment = cell_alignment
# 填充顏色(紅色填充,和紅色到黑色漸變填充)
p_fill = PatternFill(fill_type="solid", fgColor="FF0000")
g_fill = GradientFill(stop=("FF0000", "FD1111", "000000"))
cell.fill = p_fill
sheet["B1"].fill = g_fill
復制代碼

最后注意的是,這些修改操作最后都需要通過保存操作(wb.save(file_path))才能生效。

6 總結

通過上面的講解,了解如何使用 python 的 openpyxl 庫對 excel 文檔的處理操作,可以發現它的操作邏輯相當是清晰簡單的,符合的我們使用 excel 的習慣。處理流程基本是加載文件、定位需要處理的工作表、行、列及單元格。對它們進行讀、寫、修改格式等操作。因此,如果有自動化處理 excel 文件的需求,用 openpyxl 吧,但它限制只能處理 2010 格式的 excel 文檔,對于舊格式( xls )的建議都統一換為新的格式再操作,或者也可以使用 xlrd 和 xlwt 模塊操作。

分享到:
標簽:python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定