新聞中心
openpyxl模塊是一個讀寫Excel 2010文檔的Python庫,如果要處理更早格式的Excel文檔,需要用到額外的庫,openpyxl是一個比較綜合的工具,能夠同時讀取和修改Excel文檔。其他很多的與Excel相關(guān)的項目基本只支持讀或者寫Excel一種功能。

大英ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
在Centos8中安裝方式如下:
[root@localhost ~]# yum -y install python3-openpyxl
從Excel表格中讀取數(shù)據(jù)
如果要讀取 Excel 文件,必須使用 load_workbook() 方法打開電子表格。之后可以使用 active 來選擇第一個可用的工作表,并通過傳遞 row 和 column 參數(shù)使用 cell() 屬性來選擇單元格。value 屬性返回特定單元格的值。請參閱下面的示例以獲得更好的理解。
注意:第一行或第一列整數(shù)是 1,而不是 0。
下面的數(shù)據(jù)可以保存在excel表格文件中,用來做下面的實驗,文件名稱為wb.xlsx:
| Name | Course | Branch | Semester |
|---|---|---|---|
| Ankit | B.Tech | CSE | 4 |
| Rahul | M.Tech | CSE | 2 |
| Priya | MBA | HR | 3 |
| Nikhil | B.Tech | CSE | 4 |
| Nisha | B.Tech | Biotech | 5 |
[root@localhost data]# python3
# 導(dǎo)入openpyxl庫
>>> import openpyxl
# path變量指定表格文件的位置
>>> path = "/data/wb.xlsx"
# 加載表格文件
>>> wb_obj = openpyxl.load_workbook(path)
# 激活默認(rèn)的工作表
>>> sheet_obj = wb_obj.active
# 選擇第一行第一列的單元格,也就是A1單元格
>>> cell_obj = sheet_obj.cell(row = 1, column = 1)
# 打印單元格所屬位置
>>> print(cell_obj)
'Sheet1'.A1>
# 打印A1單元格的值 >>>
print(cell_obj.value) Name
從多個單元格讀取數(shù)據(jù)
從多個單元格中讀取數(shù)據(jù)的方式有兩種。
**方法一:**我們可以分別使用 max_row 和 max_column 獲得總行數(shù)和總列數(shù)。我們可以在 for 循環(huán)中使用這些值來根據(jù)情況獲取所需行或列或任何單元格的值。讓我們看看如何獲取第一列和第一行的值。
# 使用max_row獲取工作表有多少行的數(shù)據(jù)
>>> row = sheet_obj.max_row
# 使用max_column獲取工作表有多少列的數(shù)據(jù)
>>> column = sheet_obj.max_column
# 打印行數(shù)
>>> print("Total Rows: ", row)
Total Rows: 6
# 打印列數(shù)
>>> print("Total Cols: ", column)
Total Cols: 4
# 使用for循環(huán)打印第一列數(shù)據(jù)
>>> for i in range(1, row + 1):
... cell_obj = sheet_obj.cell(row = i, column = 1)
... print(cell_obj.value)
...
Name
Ankit
Rahul
Priya
Nikhil
Nisha
# 使用for循環(huán)打印第二條數(shù)據(jù):
>>> for i in range(1, column + 1):
... cell_obj = sheet_obj.cell(row = 3, column = i)
... print(cell_obj.value, end = " ")
...
Rahul M.Tech CSE 2
**方法二:**我們還可以使用單元格名稱從多個單元格中讀取。這可以看作是Python的列表切片。
# 選中A1到B6的單元格
>>> cell_obj = sheet_obj['A1':'B6']
>>>
# for玄幻打印兩列的數(shù)據(jù)
>>> for cell1, cell2 in cell_obj:
... print(cell1.value, cell2.value)
...
Name Course
Ankit B.Tech
Rahul M.Tech
Priya MBA
Nikhil B.Tech
Nisha B.Tech
寫入表格數(shù)據(jù)
首先,讓我們創(chuàng)建一個新的表格,然后我們將一些數(shù)據(jù)寫入新創(chuàng)建的文件??梢允褂?Workbook() 方法創(chuàng)建一個空的表格。讓我們看看下面的例子。
[root@localhost data]# python3
# 導(dǎo)入openpyxl庫里面的Workbook
>>> from openpyxl import Workbook
>>>
# 創(chuàng)建空的工作簿
>>> workbook = Workbook()
>>>
# 保存文件
>>> workbook.save(filename="/data/sample.xlsx")
>>>
創(chuàng)建一個空文件后,讓我們看看如何使用 Python 向其中添加一些數(shù)據(jù)。要首先添加數(shù)據(jù),我們需要選擇活動工作表,然后使用 cell() 方法,我們可以通過傳遞行號和列號作為其參數(shù)來選擇任何特定的單元格。我們也可以使用單元格名稱進(jìn)行書寫。
# 獲取激活的工作表
>>> sheet = workbook.active
>>>
# 為A1添加Hello值
>>> c1 = sheet.cell(row = 1, column = 1, value = 'Hello')
# 為B1添加World值
>>> C2 = sheet.cell(row = 1, column = 2, value = 'World')
>>>
# 為A2添加Welcome值
>>> C3 = sheet['A2'].value = 'Welcome'
# 為B2添加Everyone值
>>> C4 = sheet['B2'].value = 'Everyone'
>>>
# 保存到文件
>>> workbook.save("/data/sample.xlsx")
附加數(shù)據(jù)到表格
在上面的示例中,您將看到每次嘗試寫入表格時,現(xiàn)有數(shù)據(jù)都會被覆蓋,并且該文件將另存為新文件。發(fā)生這種情況是因為 Workbook() 方法總是創(chuàng)建一個新的工作簿文件對象。要寫入現(xiàn)有工作簿,必須使用 load_workbook() 方法打開文件。
[root@localhost data]# python3
>>> import openpyxl
>>>
# 使用load_workbook加載文件
>>> wb = openpyxl.load_workbook("/data/sample.xlsx")
>>>
>>> sheet = wb.active
>>>
>>> c = sheet['A3']
>>>
>>> c.value = 'New Data'
>>>
>>> wb.save("/data/sample.xlsx")
我們還可以使用 append() 方法在工作表的末尾附加多個數(shù)據(jù)。
# 定義數(shù)據(jù)
>>> data = (
... (1,2,3),
... (4,5,6)
... )
>>>
# 使用for循環(huán)將內(nèi)容附加到工作表中
>>> for row in data:
... sheet.append(row)
...
>>> wb.save('/data/sample.xlsx')
Excel表格的算術(shù)運(yùn)算
可以通過在電子表格的特定單元格中鍵入公式來執(zhí)行算術(shù)運(yùn)算。例如,如果我們想求和,則使用 Excel 文件的 =Sum() 公式。
[root@localhost data]# python3
>>> import openpyxl
>>>
# 創(chuàng)建新工作簿
>>> wb = openpyxl.Workbook()
>>>
>>> sheet = wb.active
>>>
# 在單元格中寫入數(shù)據(jù)
>>> sheet['A1'] = 200
>>> sheet['A2'] = 300
>>> sheet['A3'] = 400
>>> sheet['A4'] = 500
>>> sheet['A5'] = 619
# 在A7單元格求和
>>> sheet['A7'] = '=SUM(A1:A5)'
>>>
# 保存文件名稱為sum.xlsx
>>> wb.save('/data/sum.xlsx')
調(diào)整單元格的行和列
工作表對象具有控制行高和列寬的 row_dimensions 和 column_dimensions 屬性。工作表的 row_dimensions 和 column_dimensions 是類似字典的值;row_dimensions 包含 RowDimension 對象, column_dimensions 包含 ColumnDimension 對象。在 row_dimensions 中,可以使用行號(在本例中為 1 或 2)訪問其中一個對象。在 column_dimensions 中,可以使用列的字母(在本例中為 A 或 B)訪問其中一個對象。
[root@localhost data]# python3
# 導(dǎo)入模塊
>>> import openpyxl
>>>
# 創(chuàng)建新工作簿
>>> wb = openpyxl.Workbook()
>>>
>>> sheet = wb.active
>>>
# 向A1單元格寫入數(shù)據(jù)
>>> sheet.cell(row = 1, column = 1, value = ' Hello ')
'Sheet'.A1>
# 向B2單元格寫入數(shù)據(jù) >>> sheet[
'B2'].value =
' Everyone ' >>>
# 設(shè)置第一行單元格高度為45 >>> sheet.row_dimensions[1].height = 45 >>>
# 設(shè)置B列單元格寬度為70 >>> sheet.column_dimensions[
'B'].width = 70 >>> >>> wb.save(
'/data/h_and_w.xlsx')
合并單元格
可以使用 merge_cells() 方法將多個單元格合并為單個單元格。
[root@localhost data]# python3
>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
# 合并A2到D4單元格,并添加數(shù)據(jù)
>>> sheet.merge_cells('A2:D4')
>>> sheet['A2'].value = 'Twelve cells join together.'
>>>
# 合并C6到D6單元格,并添加數(shù)據(jù)
>>> sheet.merge_cells('C6:D6')
>>> sheet['C6'].value = 'Two merge cells.'
>>>
>>> wb.save('/data/merge_cells.xlsx')
取消合并單元格
如要取消合并單元格,請用 unmerge_cells() 方法。
# 取消合并A2到D4單元格
>>> sheet.unmerge_cells('A2:D4')
>>>
# 取消合并C6到D6單元格
>>> sheet.unmerge_cells('C6:D6')
>>>
>>> wb.save('/data/merge_cells.xlsx')
設(shè)置字體樣式
要自定義單元格中的字體樣式,重點(diǎn)是從 openpyxl.styles 模塊導(dǎo)入 Font() 函數(shù)。
[root@localhost data]# python3
>>> import openpyxl
# 從openpyxl.styles導(dǎo)入Font函數(shù)
>>> from openpyxl.styles import Font
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>>
# 為A1單元格添加內(nèi)容,并設(shè)置字體大小為24
>>> sheet['A1'].value = 'Linuxprobe.com'
>>> sheet['A1'].font = Font(size = 24)
# B2單元格添加內(nèi)容,設(shè)置字體大小24,斜體
>>> sheet.cell(row = 2, column = 2, value = "Linuxprobe.com").font = Font(size = 24, italic = True)
# C3單元格添加內(nèi)容,設(shè)置字體大小24,粗體
>>> sheet.cell(row = 3, column = 3, value ="Linuxprobe.com").font = Font(size = 24, bold = True)
# D4單元格添加內(nèi)容,設(shè)置字體大小24,設(shè)置字體樣式
>>> sheet.cell(row = 4, column = 4, value = "Linuxprobe.com").font = Font(size = 24, name = 'Times New Roman')
>>> wb.save('/data/font_styles.xlsx')
繪制圖表
要在 Excel 表格上繪制圖表,首先要創(chuàng)建特定圖表類(即 BarChart、LineChart 等)的圖表對象。創(chuàng)建圖表對象后,在其中插入數(shù)據(jù),最后將該圖表對象添加到工作表中。
[root@localhost data]# python3
>>> import openpyxl
# 導(dǎo)入圖表庫
>>> from openpyxl.chart import BarChart, Reference
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>>
# 使用循環(huán)為工作表附加內(nèi)容
>>> for i in range(10):
... sheet.append([i])
...
# 為圖表創(chuàng)建數(shù)據(jù)
>>> values = Reference(sheet, min_col=1,min_row=1,max_col=1,max_row=10)
#創(chuàng)建圖表實例
>>> chart = BarChart()
# 向條形圖添加數(shù)據(jù)
>>> chart.add_data(values)
# 添加圖表標(biāo)題
>>> chart.title = " BAR-CHART "
# 添加X坐標(biāo)標(biāo)題
>>> chart.x_axis.title = " X_AXIS "
# 添加Y坐標(biāo)標(biāo)題
>>> chart.y_axis.title = " Y_AXIS "
>>>
# 工作表的E2單元格添加圖表
>>> sheet.add_chart(chart, 'E2')
>>>
>>> wb.save("/data/charts.xlsx")
下面實例,是添加折線圖:
[root@localhost data]# python3
>>> import openpyxl
# 導(dǎo)入圖表庫
>>> from openpyxl.chart import LineChart, Reference
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>>
# 使用循環(huán)為工作表附加內(nèi)容
>>> for i in range(10):
... sheet.append([i])
...
# 為圖表創(chuàng)建數(shù)據(jù)
>>> values = Reference(sheet, min_col=1,min_row=1,max_col=1,max_row=10)
#創(chuàng)建圖表實例
>>> chart = LineChart()
# 向折現(xiàn)圖添加數(shù)據(jù)
>>> chart.add_data(values)
# 添加圖表標(biāo)題
>>> chart.title = " LINE-CHART "
# 添加X坐標(biāo)標(biāo)題
>>> chart.x_axis.title = " X_AXIS "
# 添加Y坐標(biāo)標(biāo)題
>>> chart.y_axis.title = " Y_AXIS "
>>>
# 工作表的E2單元格添加圖表
>>> sheet.add_chart(chart, 'E2')
>>>
>>> wb.save("/data/charts.xlsx")
添加圖片
為了在我們的工作表中導(dǎo)入圖像,我們將使用 openpyxl.drawing.image.Image。該方法是在pillow庫中找到的 PIL.Image 方法。因此,必須安裝 python3-pillow庫才能使用此方法。
[root@localhost data]# yum -y install python3-pillow
[root@localhost data]# python3
>>> import openpyxl
# 導(dǎo)入Image函數(shù)
>>> from openpyxl.drawing.image import Image
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>>
# 向工作表第一行添加內(nèi)容
>>> sheet.append(["abc",10,"def",20])
# 添加圖片
>>> img = Image("/data/banner1.jpg")
>>>
>>> sheet.add_image(img, 'A2')
>>>
>>> wb.save("/data/images.xlsx")
使用openpyxl處理表格數(shù)據(jù)使用openpyxl處理表格數(shù)據(jù)
分享文章:Linux下使用openpyxl處理表格數(shù)據(jù)
本文來源:http://m.fisionsoft.com.cn/article/cojooii.html


咨詢
建站咨詢
