如何在 Python 中读写 Excel 文件

web前端开发

共 5031字,需浏览 11分钟

 · 2021-11-15

英文 | https://python.plainenglish.io/how-to-read-and-write-excel-files-in-python-3da9825e4955
翻译 | 杨小爱

使用 Python 读取其他文件格式,我们也可以使用 openpyxl 读取 Excel 文件。Openpxyl 正式用于编写、读取和更新 excel 文件。我们还将研究如何像 Excel 宏一样使用 openpyxl 制作机器人。
在本文中,我们将遍历 openpyxl 模块的所有类,学习读写 excel 文件以及修改现有的 excel 文件。
首先,如果您已经安装了最新版本的 Python,请使用以下命令安装 openpyxl。
pip install openpyxl
读取Excel文件:
要从excel文件中读取数据,首先,我们需要导入模块并设置openpyxl的读取格式。检查以下代码以读取文件数据设置。
#import libraries from openpyxl import load_workbook
wb = load_workbook("Excel.xlsx")sheet = wb.active
从上面的代码示例中,我们已经看到 openpyxl 的 load_workbook 类采用 Excel 文件名参数,接下来,我们将读取 Excel 文件上的工作表。
正如我们所知,Excel 文件可以有无限的工作表,您可以选择当前活动的工作表,但如果您有多个工作表,则可以使用以下格式选择特定的工作表来读取数据。
#import libraries from openpyxl import load_workbook#Selecting specific sheetwb = load_workbook("Excel.xlsx")sheet = wb.worksheets[0] # 0 1 2 3 or any
现在我们已经在 openpyxl 类中加载了我们的 Excel 文件,是时候从中读取数据了。我们在 openpyxl 中有两种类型的数据读取。
  • 单元格读数

  • 列读

单元格数据读取:
让我们以下面的 Excel 数据为例。假设您有一个包含 3 个标题名称、年龄和薪水的 excel,格式如下。我们的任务是读取第一列的第一个和最后一个单元格。
Name      age    salaryHaider    21     $56,000 John      24     $36,000 Jim       20     $26,000 Sam       26     $76,000 Willaim   22     $46,000
#import libraries from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
#reading cellprint("First cell: ", sheet['A1'].value)print("Second cell: ", sheet['A6'].value)
因此,我们使用我们创建的工作表变量/对象并将活动工作表数据存储在其中。
openpyxl 以列表形式存储每一列的数据。
好吧,根据 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 行的数据。
它将以元组的形式存储第 3 列的行数据并访问该元组,我们将进行迭代 它使用for循环。我们在元组中有 3 个元素,因此我们将每个数据存储在不同的变量中,就像我们在 for 循环中所做的那样。接下来,使用 value 方法我们可以访问它们存储的位置值。
Sheet.cell()
我们还有另一种惊人的方式来使用 sheet.cell 方法读取 Excel 文件的特定单元格。检查以下代码以了解此方法的工作原理。
#import libraries from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
#reading specific column 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 个参数——行和列——最后,我们使用 .value 方法将地址数据转换为字符串格式数据。
列数据读取:
我们可以使用 openpyxl 模块读取 Excel 文件中的特定或所有列。
要读取特定列,只需使用我们在单元格读取部分中看到的方法,而不是使用字母表给出行单元格编号,只需键入列字母表。
检查下面的代码以获得更好的理解。
#import libraries from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
#reading specific column 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)
您需要做的另一件事是迭代列的数据。正如我们已经知道的,openpyxl 给出了特定单元格的位置。
这意味着我们将数据的所有位置存储在 A 列中,并使用 for 循环,我们可以转到 A 列中的每个单元格并打印它们的数据。查看此代码的输出。
输出:
NameHaiderJohnJimSamWillaim
编写 Excel 文件:
要编写 Excel 文件,我们必须遵循相同的 openpyxl 代码语法,但有一些细微差别。假设我们有一个空的 Excel 文件,我们想将数据写入其中。我们可以用两种形式在Excel中写入数据:
  • 单元格写入

  • 行列书写

两者都是相同的,但它们的工作方式不同。我们将通过它们两个,看看它们是如何实际工作的。
单元格写入
单元格写入与读取单元格相同。但是会添加一个小的修改。检查下面的代码。
#import libraries from openpyxl import load_workbook
wb = load_workbook("excel.xlsx")sheet = wb.active
#reading specific column columns = sheet["A1"].value="Name"columns = sheet["B1"].value="Age"columns = sheet["C1"].value="Salary"
wb.save("excel.xlsx")
我们没有读取数据,而是将 sheet[“A1”] 修改为 sheet[“A”].value=”Name”。所以 openpyxl 有一个类的组合,每个类都有它的对象。
所以我们调用对象值并给它字符串。我对 B1 和 C1 细胞做了同样的处理。最后,我们必须保存我们的工作簿,所以,我使用了保存方法并将其命名为 excel.xlsx,这与开始时的 excel 文件相同。如果您运行代码,您将获得以下输出。

对了,您可以自己测试一下,了解更多关于 openpyxl 中单元格编写的信息。让我们继续行列写作。
行列书写
行列书写。通过它的名字,您将了解到底发生了什么。我们将使用行号和列号编写单元格,当您想在不同列的不同行中写入大量数据时,它会派上用场。我们以上面的例子,尝试用行列写法在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")
嗯,是的!你是对的。
我们必须使用另一种读取方法通过调用其值对象来写入 Excel。如果您看到了,我们已经通过调用 value 对象,为其分配一个字符串,并使用 wb.save() 方法保存更改来完成相同的操作。如果我们运行代码,我们会得到与上面相同的输出。
让我们尝试一个不同的场景。假设我们有两个列表名称和薪水,并且我们想在 excel 中编写它。
我们将使用行列写法,检查下面的代码。
#import libraries 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 中得到以下输出。

总结
到目前为止,我们学习了如何使用不同的 openpyxl 读取方法来读取 Excel 文件,还学习了编写 Excel 文件。您可以了解有关 openpyxl 函数的更多信息,用于修改 Python 脚本并使您的 Python 脚本更准确,以便编写和读取 Excel 文件。或者查看官方文档。
最后,感谢您的阅读,希望您觉得这篇文章对您有帮助。

学习更多技能

请点击下方公众号

浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报