英文 | https://python.plainenglish.io/how-to-read-and-write-excel-files-in-python-3da9825e4955
使用 Python 讀取其他文件格式,我們也可以使用 openpyxl 讀取 Excel 文件。Openpxyl 正式用于編寫、讀取和更新 excel 文件。我們還將研究如何像 Excel 宏一樣使用 openpyxl 制作機器人。在本文中,我們將遍歷 openpyxl 模塊的所有類,學(xué)習(xí)讀寫 excel 文件以及修改現(xiàn)有的 excel 文件。首先,如果您已經(jīng)安裝了最新版本的 Python,請使用以下命令安裝 openpyxl。要從excel文件中讀取數(shù)據(jù),首先,我們需要導(dǎo)入模塊并設(shè)置openpyxl的讀取格式。檢查以下代碼以讀取文件數(shù)據(jù)設(shè)置。from openpyxl import load_workbook
wb = load_workbook("Excel.xlsx")sheet = wb.active
從上面的代碼示例中,我們已經(jīng)看到 openpyxl 的 load_workbook 類采用 Excel 文件名參數(shù),接下來,我們將讀取 Excel 文件上的工作表。正如我們所知,Excel 文件可以有無限的工作表,您可以選擇當(dāng)前活動的工作表,但如果您有多個工作表,則可以使用以下格式選擇特定的工作表來讀取數(shù)據(jù)。from openpyxl import load_workbookwb = load_workbook("Excel.xlsx")sheet = wb.worksheets[0]
現(xiàn)在我們已經(jīng)在 openpyxl 類中加載了我們的 Excel 文件,是時候從中讀取數(shù)據(jù)了。我們在 openpyxl 中有兩種類型的數(shù)據(jù)讀取。讓我們以下面的 Excel 數(shù)據(jù)為例。假設(shè)您有一個包含 3 個標題名稱、年齡和薪水的 excel,格式如下。我們的任務(wù)是讀取第一列的第一個和最后一個單元格。Name age salaryHaider 21 $56,000 John 24 $36,000 Jim 20 $26,000 Sam 26 $76,000 Willaim 22 $46,000
from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
print("First cell: ", sheet['A1'].value)print("Second cell: ", sheet['A6'].value)
因此,我們使用我們創(chuàng)建的工作表變量/對象并將活動工作表數(shù)據(jù)存儲在其中。openpyxl 以列表形式存儲每一列的數(shù)據(jù)。好吧,根據(jù) Python 列表語法,我們可以使用方括號 [] 來迭代列表。然后我們以String的形式輸入單元格位置。這里我們需要第一個和最后一個單元格。Excel 將它們命名為按字母順序排列的列,并且 openpyxl 也可以在 Alphabet 中輸入。A1 表示第一個單元格表示列 A 和行號 1,然后 A6 表示最后一列。列 A 和行號 6。First cell: NameSecond cell: Willaim
驚人的!我們還可以使用 range 方法一次讀取多個單元格。查看以下代碼。#reading multiple cellcells = sheet['A2':'C2']
for c1, c2, c3 in cells: print(c1.value, c2.value, c3.value)
好吧,我們不得不使用 range 方法告訴 openpyxl 我們想要來自 A2 → C2 列和第 2 行的數(shù)據(jù)。它將以元組的形式存儲第 3 列的行數(shù)據(jù)并訪問該元組,我們將進行迭代 它使用for循環(huán)。我們在元組中有 3 個元素,因此我們將每個數(shù)據(jù)存儲在不同的變量中,就像我們在 for 循環(huán)中所做的那樣。接下來,使用 value 方法我們可以訪問它們存儲的位置值。我們還有另一種驚人的方式來使用 sheet.cell 方法讀取 Excel 文件的特定單元格。檢查以下代碼以了解此方法的工作原理。from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
cell1 = sheet.cell(row = 1, column = 1).valuecell2 = sheet.cell(row = 1, column = 2).valuecell3 = sheet.cell(row = 1, column = 3).value
print(cell1, cell2 ,cell3)
我們可以注意到 sheet.cell() 方法接受 2 個參數(shù)——行和列——最后,我們使用 .value 方法將地址數(shù)據(jù)轉(zhuǎn)換為字符串格式數(shù)據(jù)。我們可以使用 openpyxl 模塊讀取 Excel 文件中的特定或所有列。要讀取特定列,只需使用我們在單元格讀取部分中看到的方法,而不是使用字母表給出行單元格編號,只需鍵入列字母表。from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
cell1 = sheet.cell(row = 1, column = 1).valuecell2 = sheet.cell(row = 1, column = 2).valuecell3 = sheet.cell(row = 1, column = 3).value
print(cell1, cell2 ,cell3)
您需要做的另一件事是迭代列的數(shù)據(jù)。正如我們已經(jīng)知道的,openpyxl 給出了特定單元格的位置。這意味著我們將數(shù)據(jù)的所有位置存儲在 A 列中,并使用 for 循環(huán),我們可以轉(zhuǎn)到 A 列中的每個單元格并打印它們的數(shù)據(jù)。查看此代碼的輸出。NameHaiderJohnJimSamWillaim
要編寫 Excel 文件,我們必須遵循相同的 openpyxl 代碼語法,但有一些細微差別。假設(shè)我們有一個空的 Excel 文件,我們想將數(shù)據(jù)寫入其中。我們可以用兩種形式在Excel中寫入數(shù)據(jù):兩者都是相同的,但它們的工作方式不同。我們將通過它們兩個,看看它們是如何實際工作的。單元格寫入與讀取單元格相同。但是會添加一個小的修改。檢查下面的代碼。from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
columns = sheet["A1"].value="Name"columns = sheet["B1"].value="Age"columns = sheet["C1"].value="Salary"
wb.save("excel.xlsx")
我們沒有讀取數(shù)據(jù),而是將 sheet[“A1”] 修改為 sheet[“A”].value=”Name”。所以 openpyxl 有一個類的組合,每個類都有它的對象。所以我們調(diào)用對象值并給它字符串。我對 B1 和 C1 細胞做了同樣的處理。最后,我們必須保存我們的工作簿,所以,我使用了保存方法并將其命名為 excel.xlsx,這與開始時的 excel 文件相同。如果您運行代碼,您將獲得以下輸出。
對了,您可以自己測試一下,了解更多關(guān)于 openpyxl 中單元格編寫的信息。讓我們繼續(xù)行列寫作。行列書寫。通過它的名字,您將了解到底發(fā)生了什么。我們將使用行號和列號編寫單元格,當(dāng)您想在不同列的不同行中寫入大量數(shù)據(jù)時,它會派上用場。我們以上面的例子,嘗試用行列寫法在excel中重新寫一遍。#import libraries from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
#reading specific column sheet.cell(row=1, column=1).value="Name"sheet.cell(row=1, column=2).value="Age"sheet.cell(row=1, column=3).value="Salary"
wb.save("excel.xlsx")
我們必須使用另一種讀取方法通過調(diào)用其值對象來寫入 Excel。如果您看到了,我們已經(jīng)通過調(diào)用 value 對象,為其分配一個字符串,并使用 wb.save() 方法保存更改來完成相同的操作。如果我們運行代碼,我們會得到與上面相同的輸出。讓我們嘗試一個不同的場景。假設(shè)我們有兩個列表名稱和薪水,并且我們想在 excel 中編寫它。from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.worksheets[0]
name=["John", "Dennis", "Ferb", "Candas", "Tadashi"]salary=["$45000","$78000","$34000","$71000","$98000"]
sheet.cell(row=1, column=1).value="Name"sheet.cell(row=1, column=2).value="Salary"
j=2for i in range(0,5): sheet.cell(row=j, column=1).value=name[i] sheet.cell(row=j, column=2).value=salary[i] j+=1
wb.save("excel.xlsx")
首先,我們必須編寫 Excel 文件的標題。因此,一開始,我們對標題的行和列進行了硬編碼,接下來,我們迭代名稱和工資中的元素。我們知道每一列的第一行是為標題保留的。所以,我們從第二行開始寫。如果我們運行此代碼,我們將在 Excel 中得到以下輸出。
到目前為止,我們學(xué)習(xí)了如何使用不同的 openpyxl 讀取方法來讀取 Excel 文件,還學(xué)習(xí)了編寫 Excel 文件。您可以了解有關(guān) openpyxl 函數(shù)的更多信息,用于修改 Python 腳本并使您的 Python 腳本更準確,以便編寫和讀取 Excel 文件。或者查看官方文檔。最后,感謝您的閱讀,希望您覺得這篇文章對您有幫助。學(xué)習(xí)更多技能
請點擊下方公眾號

