您好,登錄后才能下訂單哦!
小編給大家分享一下Linux下如何使用openpyxl處理表格數(shù)據(jù),希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
openpyxl模塊是一個讀寫Excel 2010文檔的Python庫,如果要處理更早格式的Excel文檔,需要用到額外的庫,openpyxl是一個比較綜合的工具,能夠同時讀取和修改Excel文檔。其他很多的與Excel相關(guān)的項目基本只支持讀或者寫Excel一種功能。
在Centos8中安裝方式如下:
[root@localhost ~]# yum -y install python3-openpyxl
如果要讀取 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ù)的方式有兩種。
**方法一:**我們可以分別使用 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
首先,讓我們創(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ù)來選擇任何特定的單元格。我們也可以使用單元格名稱進行書寫。
# 獲取激活的工作表>>> 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")
在上面的示例中,您將看到每次嘗試寫入表格時,現(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')
可以通過在電子表格的特定單元格中鍵入公式來執(zhí)行算術(shù)運算。例如,如果我們想求和,則使用 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')
工作表對象具有控制行高和列寬的 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')
要自定義單元格中的字體樣式,重點是從 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")
看完了這篇文章,相信你對“Linux下如何使用openpyxl處理表格數(shù)據(jù)”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。