当前位置: 首页 > news >正文

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)

只写入某一列的数据

image-20260521184823127

从某个单元格开始写入数据

只需要拼接出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 Worksheetdef 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()

仓库地址

learn_openpyxl · 南风丶轻语/python-learning-notes - 码云 - 开源中国

http://www.jsqmd.com/news/859646/

相关文章:

  • 使用 curl 命令直接测试 Taotoken 聊天接口的连通性与返回格式
  • Prism Launcher:重新定义你的Minecraft启动体验
  • 学生心理测评系统哪家好?2026谁能守护青少年心理健康? - 健成星云
  • 2026年4月市面上有名的活性炭公司口碑推荐,杏壳活性炭/净水活性炭/煤质柱状活性炭/食品级活性炭,活性炭品牌找哪家 - 品牌推荐师
  • Audio Slicer:智能音频分割终极指南,告别繁琐手动剪辑
  • 2026年求推荐中式整装企业-靠谱的中式整装公司-比较好的中式整装品牌企业 - 品牌推广大师
  • 2026医考机构通过率对比:谁更值得选? - 医考机构品牌测评专家
  • 【仅限前500名设计师获取】Midjourney双色调调色板生成器(含17组经Adobe Color验证的高转化配色矩阵)
  • 采购必看:复合盐雾试验机哪家口碑好?内行人都推昆山澳博检测仪器有限公司! - 品牌推荐大师
  • 2026 年广东省内医科大学院校哪所比较好?有什么报考推荐 - 品牌2025
  • 使用Taotoken后API调用稳定性与延迟的实际体验观察
  • 零基础考医师资格证,怎么选辅导机构? - 医考机构品牌测评专家
  • 喀什外贸独立站哪家服务好?WaiMaoYa 外贸鸭打造中亚贸易专业网站 - 外贸营销工具
  • 从一颗2N5551看懂半导体散热:热阻Rja、Rjc到底怎么测?对我们选型有啥用?
  • AI 不锈钢电热保温杯智能功率 MOSFET 完整选型方案
  • 避坑指南:华为云Stack OBS 3.0对象存储部署,小型化与标准化方案到底怎么选?
  • 广州俄罗斯线路代理清关公司实力排行盘点 - 互联网科技品牌测评
  • 2026年太原漏水检测维修靠谱公司推荐榜:精准测漏、查漏水、测漏水、地埋管漏水、漏水维修、防水维修服务商甄选指南 - 海棠依旧大
  • 如何在ComfyUI中使用InstantID实现AI人脸风格化:完整指南与实战技巧
  • 伊犁外贸建站如何挑选?WaiMaoYa 外贸鸭覆盖西域跨境出海服务 - 外贸营销工具
  • AI 不锈钢厨具智能功率 MOSFET 完整选型方案
  • 告别龟速下载!用官方离线包在Windows上快速搞定ESP-IDF+VSCode环境
  • Midjourney色彩控制已进入“纳米级调控”时代:基于Lab色彩空间的渐变控制、局部色相锁定与动态色温偏移技术首度解密
  • 汕头奢侈品黄金回收避坑攻略!本地靠谱交易门店甄选指南 - 小仙贝贝
  • 如何三步免费下载百度文库文档:智能清理与打印保存完整指南
  • 07-覆盖率展示层:概览页、详情页、源码着色与导出是如何组织的
  • 锡林郭勒外贸独立站怎么选?WaiMaoYa 外贸鸭助力草原企业出海拓客 - 外贸营销工具
  • 【专升本】2026专升本备考资料汇总|各学科资料+必刷2000题+网课+各省真题PDF+模拟卷
  • 告别编译噩梦:用Docker容器5分钟搞定webrtc-streamer部署
  • 告别迷茫!手把手教你用Vivado 2023.1为ZYNQ 7000系列配置PS端并打印Hello World