Python利用openpyxl库写入或修改xlsx文件
写在前面
1、openpyxl库写入数据时,默认下标是从1开始,而不是习惯性的从0开始
常用函数
导入openpyxl库
from openpyxl.reader.excel import load_workbook
from openpyxl.utils import column_index_from_string
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet
创建一个新的工作簿
相当于新建一个Excel文件
wb = Workbook()
获取工作表
默认名为Sheet
sheet: Worksheet = wb.active
修改表名称
sheet.title = "成绩汇总"
写入指定【单元格】
1. 字母+数字方式写入
字母不区分大小写
sheet['A1'] = "报考岗位代码"
sheet['B1'] = "准考证"
sheet['C1'] = "职业能力测验"
sheet['d1'] = "综合应用能力"
sheet['e1'] = "总成绩"
2.利用cell函数写入
row = 2 # 行,下标从1开始,第2行
column = 1 # 列,下标从1开始,第1列
sheet.cell(row, column, '15325002000000001')
row = 2 # 行,下标从1开始,第2行
column = 2 # 列,下标从1开始,第2列
sheet.cell(row, column, "1153481903719")
score = [107.5, 107.5, 215]
for i, s in enumerate(score):
sheet.cell(2, i + 3, s)
按【行】写入
使用append函数,传递的参数为二维数组
使用场景:有很多行数据,并且每行的数据都是知道的,需要一行一行的录入
append会直接在有数据的下一行开始写入
data = [
['15325002000000001', '1153481903719', 107.5, 107.5, 215],
['15325002000000001', '1153481904705', 104, 105, 209],
['15325002000000001', '1153481907121', 82.5, 101, 183.5],
['15325002000000001', '1153481902605', 87, 95, 182],
]
for row_data in data:
sheet.append(row_data)
按【列】写入
使用append函数,传递的参数为字典dict
使用场景:有很多行数据,但是每行的数据只有某一列,要提前录入
比如:只知道报考岗位代码,要先录入报考岗位代码
data = {'A': "15325002000000001"}
sheet.append(data)
data = {'A': "15325002000000002"}
sheet.append(data)
for i in range(3, 6):
data = {'A': f"1532500200000000{i}"}
sheet.append(data)
只写入某一列的数据

从某个单元格开始写入数据
只需要拼接出cell函数的行号和列号,然后写入数据即可
data = [
['15325002000000003', '1153250101321', 101, 105, 206],
['15325002000000003', '1153481904926', 103.5, 102, 205.5],
['15325002000000003', '1153250104211', 94, 95, 189],
['15325002000000003', '1153481900102', 87.5, 98.5, 186],
['15325002000000003', '1153250104318', 78, 104, 182],
]
start_row = 16 # 从第16行开始写入
start_column = column_index_from_string('e') # 从第A列开始写入
for i, row_data in enumerate(data):
for j, cell_data in enumerate(row_data):
sheet.cell(start_row + i, start_column + j, cell_data)
保存工作簿
wb.save("创建.xlsx")
修改工作簿数据
只需要把新建工作簿替换为加载已存在的工作簿即可
写入数据的函数不变,原有单元格数据被写入时就是覆盖!
打开已经存在的文件
wb = load_workbook("学生成绩汇总表.xlsx")=
加载表格
sheet = wb['表格1']
其他操作不变,例如
# 修改单元格
sheet['C2'] = '王明明'
# 修改单元格
sheet.cell(7, 5, '2088/8/8')
wb.save("覆盖.xlsx")
代码
# -*- coding: utf-8 -*-
"""
File Name: write_data.py
Author: Administrator
Date: 2026/5/16
"""
from openpyxl.reader.excel import load_workbook
from openpyxl.utils import column_index_from_string
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet
def main():
# 创建一个新的工作簿(相当于新建一个Excel文件)
wb = Workbook()
# 获取工作表(默认名为Sheet)
sheet: Worksheet = wb.active
# 修改表名称
sheet.title = "成绩汇总"
# 写入指定【单元格】
# 1.字母+数字方式写入,字母不区分大小写
sheet['A1'] = "报考岗位代码"
sheet['B1'] = "准考证"
sheet['C1'] = "职业能力测验"
sheet['d1'] = "综合应用能力"
sheet['e1'] = "总成绩"
# 2.利用cell函数写入
row = 2 # 行,下标从1开始,第2行
column = 1 # 列,下标从1开始,第1列
sheet.cell(row, column, '15325002000000001')
row = 2 # 行,下标从1开始,第2行
column = 2 # 列,下标从1开始,第2列
sheet.cell(row, column, "1153481903719")
score = [107.5, 107.5, 215]
for i, s in enumerate(score):
sheet.cell(2, i + 3, s)
# 按【行】写入
# 使用append函数,传递的参数为二维数组
# 使用场景:有很多行数据,并且每行的数据都是知道的,需要一行一行的录入
# append会直接在有数据的下一行开始写入
data = [
['15325002000000001', '1153481903719', 107.5, 107.5, 215],
['15325002000000001', '1153481904705', 104, 105, 209],
['15325002000000001', '1153481907121', 82.5, 101, 183.5],
['15325002000000001', '1153481902605', 87, 95, 182],
]
for row_data in data:
sheet.append(row_data)
# 按【列】写入
# 使用append函数,传递的参数为字典dict
# 使用场景:有很多行数据,但是每行的数据只有某一列,要提前录入
# 比如:只知道报考岗位代码,要先录入报考岗位代码
data = {'A': "15325002000000001"}
sheet.append(data)
data = {'A': "15325002000000002"}
sheet.append(data)
for i in range(3, 6):
data = {'A': f"1532500200000000{i}"}
sheet.append(data)
# 从某个单元格开始写入数据
data = [
['15325002000000003', '1153250101321', 101, 105, 206],
['15325002000000003', '1153481904926', 103.5, 102, 205.5],
['15325002000000003', '1153250104211', 94, 95, 189],
['15325002000000003', '1153481900102', 87.5, 98.5, 186],
['15325002000000003', '1153250104318', 78, 104, 182],
]
start_row = 16 # 从第16行开始写入
start_column = column_index_from_string('e') # 从第A列开始写入
for i, row_data in enumerate(data):
for j, cell_data in enumerate(row_data):
sheet.cell(start_row + i, start_column + j, cell_data)
# 保存工作簿
wb.save("创建.xlsx")
# 打开已经存在的文件
wb = load_workbook("学生成绩汇总表.xlsx")
# 加载表格
sheet = wb['表格1']
# 修改单元格
sheet['C2'] = '王明明'
# 修改单元格
sheet.cell(7, 5, '2088/8/8')
wb.save("覆盖.xlsx")
if __name__ == "__main__":
main()

浙公网安备 33010602011771号