Skip to content

写入Excel文档

openpyxl 也提供了一些方法写入数据,这意味着你的程序可以创建和编辑电子表格文件。利用 Python,创建一个包含几千行数据的电子表格是非常简单的。

创建 Excel 文档

调用 openpyxl.Workbook() 函数,创建一个新的空 Workbook 对象。在交互式环境中输入以下代码:

python
from openpyxl.workbook import Workbook

# 1. 创建工作蒲
workbook = Workbook()
print(workbook.sheetnames)  # 打印工作表的名字

# 2. 获取工作表
sheet1 = workbook.active  # 获取激活的 sheet 表
print(sheet1, sheet1.title)
treeData = [
    ["姓名", "语文", "数学", "英语"],
    ["正心", 60, 60, 60],
    ["全栈", 60, 60, 60],
    ["编程", 60, 60, 60],
]

for row in treeData:
    sheet1.append(row)  # 追加内容到 sheet 表
workbook.save("student.xlsx")

工作簿将从一个工作表开始,名为 Sheet。你可以将新的字符串保存在它的 title 属性中,从而改变工作表的名字。

当修改 Workbook 对象或它的工作表和单元格时,电子表格文件不会保存,除非你调用 save() 工作簿方法。在交互式环境中输入以下代码(让 example.xlsx 处于当前工作目录):

修改标题

python
from openpyxl import load_workbook, Workbook

workbook: Workbook = load_workbook('student.xlsx')
print(workbook.sheetnames)
sheet = workbook['Sheet']  # 获取 sheet 表
sheet.title = '学生信息表'  # 修改表名
# 保存为新文件
workbook.save('student_copy.xlsx')

这里,我们改变了工作表的名称。为了保存变更,我们将文件名作为字符串传递给 save() 方法。传入的文件名与最初的文件名不同,例如student_copy.xlsx,这将变更保存到电子表格的一份拷贝中。

当你编辑从文件中加载的一个电子表格时,总是应该将新的、编辑过的电子表格保存到不同的文件名中。这样,如果代码中有缺陷,导致新的保存到文件中数据不对或讹误,还有最初的电子表格文件可以处理。

创建和删除工作表

利用 create_sheet() and remove() 方法,可以在工作簿中添加或删除工作表。在交互式环境中输入以下代码:

python
from openpyxl import load_workbook, Workbook

workbook: Workbook = load_workbook('student.xlsx')
print(workbook.sheetnames)
sheet = workbook['Sheet']  # 获取 sheet 表
sheet.title = '学生信息表'  # 修改表名
print(workbook.sheetnames)

# 创建新的老师表
sheet2 = workbook.create_sheet(title='老师信息表', index=0)
print(workbook.sheetnames)
# 添加数据
sheet2.append(['姓名', '科目'])
sheet2.append(['正心', 'python'])

# 删除 sheet 表
workbook.remove(sheet)
print(workbook.sheetnames)
# 覆盖保存
workbook.save('student_copy.xlsx')

create_sheet() 方法返回一个新的 Worksheet 对象,名为 老师信息表 ,它默认是工作簿的最后一个工作表。或者,可以利用 indextitle 关键字参数,指定新工作表的索引或名称。

remove() 方法接受一个 Worksheet 对象作为其参数,而不是工作表名称的字符串。如果你只知道要删除的工作表的名称,就调用 workbook['Sheet表名'] 获取到 sheet 表对象,将它的返回值传入remove()

在工作簿中添加或删除工作表之后,记得调用 save() 方法来保存变更。

将值写入单元格

将值写入单元格,很像将值写入字典中的键。在交互式环境中输入以下代码:

python
import openpyxl
from openpyxl.cell import Cell
from openpyxl.worksheet.worksheet import Worksheet

workbook = openpyxl.Workbook()

sheet1: Worksheet = workbook.active  # 获取激活的 sheet 表
treeData = [
    ["姓名", "语文", "数学", "英语"],
    ["正心", 60, 60, 60],
    ["全栈", 60, 60, 60],
]

row4 = ["编程", 60, 60, 60]

for row in treeData:
    sheet1.append(row)  # 追加内容到 sheet 表

# 获取单元格
a1: Cell = sheet1['A1']
a1.value = '姓名(中文)'
print(a1, a1.value, a1.row, a1.column)

# 操作单元格
sheet1.cell(row=4, column=1, value=row4[0])
sheet1.cell(row=4, column=2).value = row4[1]
sheet1.cell(row=4, column=3).value = row4[2]
sheet1.cell(row=4, column=4).value = row4[3]
workbook.save("student.xlsx")

如果你有单元格坐标的字符串,可以像字典的键一样,将它用于 Worksheet 对象,指定要写入的单元格。

案例

批量写入数据

题目需求:

  1. 创建一个 青灯教育学员成绩表.xlsx 的excel工作蒲
  2. 将字典数据写入 sheet1 表
  3. 将列表数据写入 sheet2 表
python
students1 = [
    {"name": "正心", "math": 65, "chinese": 75, "english": 95},
    {"name": "清风", "math": 65, "chinese": 75, "english": 95},
    {"name": "丸子", "math": 65, "chinese": 75, "english": 95},
    {"name": "山禾", "math": 65, "chinese": 75, "english": 95},
    {"name": "马克", "math": 65, "chinese": 75, "english": 95},
]

students2 = [
    ['正心', 65, 75, 95],
    ['清风', 65, 75, 95],
    ['丸子', 65, 75, 95],
    ['山禾', 65, 75, 95],
    ['马克', 65, 75, 95]
]
参考答案
python
import openpyxl
from openpyxl.worksheet.worksheet import Worksheet

students1 = [
    {"name": "正心", "math": 65, "chinese": 75, "english": 95},
    {"name": "清风", "math": 65, "chinese": 75, "english": 95},
    {"name": "丸子", "math": 65, "chinese": 75, "english": 95},
    {"name": "山禾", "math": 65, "chinese": 75, "english": 95},
    {"name": "马克", "math": 65, "chinese": 75, "english": 95},
]

students2 = [
    ['正心', 65, 75, 95],
    ['清风', 65, 75, 95],
    ['丸子', 65, 75, 95],
    ['山禾', 65, 75, 95],
    ['马克', 65, 75, 95]
]

# 创建一个空工作蒲
workbook = openpyxl.Workbook()

"""写入字典数据"""
sheet1 = workbook.create_sheet('sheet1')  # type:Worksheet

sheet1.cell(row=1, column=1).value = '姓名'
sheet1.cell(row=1, column=2).value = '数学'
sheet1.cell(row=1, column=3).value = '语文'
sheet1.cell(row=1, column=4).value = '英语'

for row_index in range(2, len(students1) + 2):
    sheet1.cell(row=row_index, column=1).value = students1[row_index - 2]['name']
    sheet1.cell(row=row_index, column=2).value = students1[row_index - 2]['math']
    sheet1.cell(row=row_index, column=3).value = students1[row_index - 2]['chinese']
    sheet1.cell(row=row_index, column=4).value = students1[row_index - 2]['english']

"""写入列表的数据"""

sheet2 = workbook.create_sheet('sheet2')  # type:Worksheet

# sheet2.cell(row=1, column=1).value = '姓名'
# sheet2.cell(row=1, column=2).value = '数学'
# sheet2.cell(row=1, column=3).value = '语文'
# sheet2.cell(row=1, column=4).value = '英语'

# sheet.append 追加一列数据到末尾
sheet2.append(['姓名', '数学', '语文', '英语'])

# for row in students2:
#     sheet2.append(row)

for row_index in range(2, len(students2) + 2):
    sheet2.cell(row=row_index, column=1).value = students2[row_index - 2][0]
    sheet2.cell(row=row_index, column=2).value = students2[row_index - 2][1]
    sheet2.cell(row=row_index, column=3).value = students2[row_index - 2][2]
    sheet2.cell(row=row_index, column=4).value = students2[row_index - 2][3]

workbook.save('青灯教育学员成绩表.xlsx')