当前位置: 首页 > 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.gsyq.cn/news/1339128.html

相关文章:

  • 学生心理测评系统哪家好?2026谁能守护青少年心理健康? - 健成星云
  • 使用 curl 命令直接测试 Taotoken 聊天接口的连通性与返回格式
  • 2026年4月市面上有名的活性炭公司口碑推荐,杏壳活性炭/净水活性炭/煤质柱状活性炭/食品级活性炭,活性炭品牌找哪家 - 品牌推荐师
  • 如何快速掌握SPT-AKI存档编辑器:离线版塔科夫玩家的终极修改指南
  • 影刀RPA跨境店群运营架构:TikTok Shop与TEMU高并发Python调度引擎实战
  • 越南语TTS合规生死线:GDPR+越南《个人数据保护法令》双框架下ElevenLabs语音日志清理SOP
  • 使用Taotoken后API调用稳定性与延迟的实际体验观察
  • 【仅限前500名设计师获取】Midjourney双色调调色板生成器(含17组经Adobe Color验证的高转化配色矩阵)
  • AI 不锈钢电热保温杯智能功率 MOSFET 完整选型方案
  • 零基础考医师资格证,怎么选辅导机构? - 医考机构品牌测评专家
  • 2026年太原漏水检测维修靠谱公司推荐榜:精准测漏、查漏水、测漏水、地埋管漏水、漏水维修、防水维修服务商甄选指南 - 海棠依旧大
  • Windhawk终极指南:5分钟掌握Windows系统个性化定制
  • 3分钟彻底清理Windows系统:Win11Debloat让你的电脑重获新生
  • 从零训练潮州话语音克隆模型:ElevenLabs Fine-tuning实战(附1782条标注语料清洗脚本)
  • 如何三步免费下载百度文库文档:智能清理与打印保存完整指南
  • Midjourney色彩控制已进入“纳米级调控”时代:基于Lab色彩空间的渐变控制、局部色相锁定与动态色温偏移技术首度解密
  • 3个核心功能:用HSTracker将炉石传说数据转化为你的制胜优势
  • 【Prompt实战】反向提示词工程:教你如何给AI设定“输出约束”与“负面清单”
  • 2025-2026年国内一线电动阀门推荐:澳翔自控深度评测与选型指南 - 新闻快传
  • LangChain学习之提示词模板 (Prompts) - 练习(2/8)
  • 2026年一体式卫生间公司行业服务与发展趋势分析 - 品牌排行榜
  • 南京女性心理咨询机构如何选择?专业服务助力心理健康 - 品牌排行榜
  • 写给前端的 CANN-ops-fft:昇腾FFT算子库到底是啥?
  • 【硬核测评】程序员专属AI面霸养成指南:鹅来面OfferGoose,真的能让你Offer拿到手软?
  • 想学网络安全先收藏,帮你少走大量弯路
  • 2026年沙盘模型设计制作公司最新推荐榜:建筑/工业/规划/智能沙盘定制厂家甄选 - 海棠依旧大
  • 2026年5月贵阳黄金奢侈品回收公司最新推荐:黄金、彩金、奢侈品回收优选指南 - 海棠依旧大
  • Canvas 安全事件后高校场景钓鱼攻击机理与防御研究
  • 10-部署、联调与排障:这套平台如何真正稳定跑起来
  • 2026年贵阳黄金奢侈品回收公司靠谱推荐榜:黄金/彩金/珠宝/奢侈品/黄金首饰/黄金手镯/黄金项链回收 - 海棠依旧大