如何在 Python 中读写 Excel 文件

2ba94637f9ae352e77029f88b4fd8ba4.png

英文 | 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 sheet
wb = load_workbook("Excel.xlsx")
sheet = wb.worksheets[0] # 0 1 2 3 or any

现在我们已经在 openpyxl 类中加载了我们的 Excel 文件,是时候从中读取数据了。我们在 openpyxl 中有两种类型的数据读取。

  • 单元格读数

  • 列读

单元格数据读取:

让我们以下面的 Excel 数据为例。假设您有一个包含 3 个标题名称、年龄和薪水的 excel,格式如下。我们的任务是读取第一列的第一个和最后一个单元格。

Name      age    salary
Haider    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 cell
print("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:  Name
Second cell:  Willaim

惊人的!我们还可以使用 range 方法一次读取多个单元格。查看以下代码。

#reading multiple cell
cells = 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).value
cell2 = sheet.cell(row = 1, column = 2).value
cell3 = 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).value
cell2 = sheet.cell(row = 1, column = 2).value
cell3 = sheet.cell(row = 1, column = 3).value


print(cell1, cell2 ,cell3)

您需要做的另一件事是迭代列的数据。正如我们已经知道的,openpyxl 给出了特定单元格的位置。

这意味着我们将数据的所有位置存储在 A 列中,并使用 for 循环,我们可以转到 A 列中的每个单元格并打印它们的数据。查看此代码的输出。

输出:

Name
Haider
John
Jim
Sam
Willaim

编写 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 文件相同。如果您运行代码,您将获得以下输出。

0c2a59e6d9fbc67dcaa32d0fa308d914.png

对了,您可以自己测试一下,了解更多关于 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=2
for 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 中得到以下输出。

266e9869996a3ebb8af13549f8a7f263.png

总结

到目前为止,我们学习了如何使用不同的 openpyxl 读取方法来读取 Excel 文件,还学习了编写 Excel 文件。您可以了解有关 openpyxl 函数的更多信息,用于修改 Python 脚本并使您的 Python 脚本更准确,以便编写和读取 Excel 文件。或者查看官方文档。

最后,感谢您的阅读,希望您觉得这篇文章对您有帮助。

学习更多技能

请点击下方公众号

57d1d8e3e920b78374b0696558d0941a.png

44cb614a59a55109a4890aace9a1f5e9.png

42a5bb6d941ce7b39d5abb887612cc67.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值