《超简单:用 Python 让 Excel 飞起来》读书笔记:3.3.4 操控工作表和单元格:选表、写入、新增工作表

发布时间:2026/6/15 20:26:20

《超简单:用 Python 让 Excel 飞起来》读书笔记:3.3.4 操控工作表和单元格:选表、写入、新增工作表 个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化《超简单用 Python 让 Excel 飞起来》读书笔记3.3.4 操控工作表和单元格选表、写入、新增工作表1. 3.3.4 操控工作表和单元格选表、写入、新增工作表2. 选表按名称选择和按索引选择3. 写入单元格range(A1).value 是核心入口4. 新增工作表自动生成汇总表5. 完整示例打开文件、选表、写入、新增表、保存6. 常见问题为什么脚本能跑但结果不对7. 总结提升从打开 Excel 到真正控制 Excel1. 3.3.4 操控工作表和单元格选表、写入、新增工作表这一篇是我阅读《超简单用 Python 让 Excel 飞起来》时整理的读书笔记主题是3.3.4 操控工作表和单元格选表、写入、新增工作表。前面已经学过如何启动 Excel、打开工作簿、保存并关闭文件但这些还只是“把 Excel 打开”。真正的自动化价值从能控制工作表和单元格开始。这一节的核心并不复杂主要围绕三个动作展开选择工作表、向单元格写入内容、新增工作表。用 xlwings 来理解就是wb.sheets[Sheet1]、sht.range(A1).value和wb.sheets.add(汇总)这几类操作。我的理解是打开 Excel 只是建立连接操作工作表和单元格才是真正开始改数据。如果不能选表、不能写入、不能生成新表那脚本最多只能算“启动器”还不能算真正的办公自动化脚本。这张图展示的是 xlwings 操控工作表和单元格的整体场景Python 通过 xlwings 连接 Excel然后对工作表标签和单元格区域进行操作。从图中可以看到Excel 不再只是一个被手动点击的软件而是可以被 Python 代码控制的对象。工作簿、工作表、单元格区域都可以通过代码定位。掌握这一步后后面的批量写入、自动生成汇总表、自动生成报表就有了基础。启动 Excel 应用打开或新建工作簿选择目标工作表定位单元格区域写入数据新增工作表生成汇总或报表保存并关闭这张流程图可以帮助我们把本节内容串起来先打开工作簿再选中工作表然后定位单元格并写入数据如果需要生成新报表就新增一个工作表最后保存文件。这个流程比单独记语法更有价值。2. 选表按名称选择和按索引选择在操作单元格之前第一步必须先选中工作表。因为一个 Excel 工作簿里可能有多张表比如数据、明细、汇总、Sheet1。如果没有明确告诉脚本操作哪一张表后续写入数据就很容易写错位置。最常见的选表方式是按工作表名称选择shtwb.sheets[Sheet1]这里的wb是工作簿对象sheets是工作表集合Sheet1是具体工作表名称。选中之后后续对单元格的操作都可以写成sht.range(...)。另一种方式是按索引选择shtwb.sheets[0]这里的0表示第一张工作表。需要注意Python 的索引通常从 0 开始而不是从 1 开始。所以wb.sheets[0]是第一张表wb.sheets[1]才是第二张表。这张图展示的是 xlwings 选择工作表的两种方式按名称选择和按索引选择。从图中可以看出wb.sheets[Sheet1]更直观因为它直接写出了工作表名称wb.sheets[0]更简短但需要确认第一个工作表就是目标表。如果表名固定我更推荐按名称选择如果只想处理第一张表才考虑按索引选择。这里最容易踩坑的是表名不一致。有些 Excel 文件里并不叫Sheet1而是叫数据、原始数据、明细表。如果代码里写死Sheet1但文件里没有这张表脚本就会报错。比较稳的做法是先打印所有工作表名称forsinwb.sheets:print(s.name)这样可以先确认工作簿里到底有哪些表再决定使用哪个表名。这个动作看起来简单但在处理别人发来的 Excel 文件时非常实用。3. 写入单元格range(‘A1’).value 是核心入口选中工作表之后下一步就是操作单元格。xlwings 中最常见的写法是sht.range(A1).value ...。这里的range(A1)表示定位到 A1 单元格value表示读取或写入这个单元格的值。写入单个值非常直接sht.range(A1).value你好Excel!sht.range(A2).value123sht.range(A3).value3.14这几行代码分别向 A1、A2、A3 写入字符串、整数和小数。对于最基础的 Excel 自动化来说这已经可以完成很多简单任务比如写入标题、状态、统计结果、处理标记。如果要写入一行数据可以使用列表sht.range(A1).value[姓名,部门,工资]如果要写入一个区域可以使用二维列表data[[姓名,部门,工资],[张三,IT,8000],[李四,HR,7500],]sht.range(A1).valuedata这张图展示的是 xlwings 写入单元格的三种常见情况写入单个值、写入列表、写入二维列表。从图中可以看出xlwings 的优势在于它可以把 Python 中的数据结构直接写入 Excel。一个字符串可以写入一个单元格一个列表可以写入一行或一列一个二维列表可以写入一整块区域。批量写入的核心价值是减少逐格操作。如果一格一格写代码会慢也容易乱如果把数据组织成二维列表一次写入一个区域效率和可读性都会更好。读取单元格也很简单vsht.range(A1).valueprint(v)建议新手在写入后顺手读取一次确认写入结果是否符合预期。脚本不报错不代表数据一定写对了。尤其是批量写入时起始单元格、数据方向和二维列表结构都需要检查。4. 新增工作表自动生成汇总表很多报表自动化场景不只是修改原始表还需要自动生成新的结果表。比如原始数据放在明细表中脚本处理后自动新增一张汇总表把统计结果、图表或处理结果写进去。在 xlwings 中新增工作表可以使用new_shtwb.sheets.add(汇总)新增后new_sht就代表这张新建的工作表可以继续写入内容new_sht.range(A1).value这是自动生成的汇总表这张图展示的是通过 xlwings 新增工作表并自动生成汇总表的场景。从图中可以看到新增工作表不是为了多一个标签而是为了让脚本自动生成新的输出结果。比如原始数据在 1 月、2 月、3 月表中脚本可以自动创建汇总表把统计结果集中写入。这里最常见的问题是同名工作表冲突。如果工作簿里已经有一张叫汇总的表再执行wb.sheets.add(汇总)就可能报错。所以正式脚本里不要直接新增最好先判断是否已经存在。比较稳的写法如下sheet_name汇总ifsheet_namein[s.nameforsinwb.sheets]:sht_sumwb.sheets[sheet_name]else:sht_sumwb.sheets.add(sheet_name)sht_sum.range(A1).valueOK推荐做法是如果表已存在就复用如果不存在再新增。这样脚本重复运行时不会轻易报错也更适合真实办公环境。5. 完整示例打开文件、选表、写入、新增表、保存单独看选表、写入、新增工作表都不难但真正写脚本时需要把它们连成一条完整流程。下面这个例子模拟一个常见场景打开一个 Excel 文件选择数据表在指定单元格写入处理标记然后新增或复用汇总表最后保存并关闭。importxlwingsasxw appxw.App(visibleFalse)try:wbapp.books.open(rC:\Temp\data\报表.xlsx)# 1. 选择工作表shtwb.sheets[Sheet1]# 2. 写入单元格sht.range(A1).value已处理sht.range(A2).value[字段1,字段2,字段3]# 3. 新增工作表如果已经存在则复用sheet_name汇总ifsheet_namein[s.nameforsinwb.sheets]:sht_sumwb.sheets[sheet_name]else:sht_sumwb.sheets.add(sheet_name)sht_sum.range(A1).value这里是汇总内容# 4. 保存并关闭wb.save()wb.close()finally:app.quit()这张图展示的是完整的工作表操作流程打开工作簿、选择工作表、写入单元格、新增工作表、保存工作簿。从图中可以看出一段真正可用的 Excel 自动化脚本通常不是只执行一个动作而是一组动作按顺序完成。打开工作簿是入口选表是定位写入是动作新增表是生成结果保存是最终落地。这里要特别注意异常退出问题。如果脚本中途报错但没有执行app.quit()后台可能残留 Excel 进程。所以上面示例使用try...finally确保即使中途出错最后也会关闭 Excel 应用。如果是在调试阶段可以把visibleFalse改成visibleTrue这样可以看到 Excel 界面变化更方便判断脚本到底做了什么。appxw.App(visibleTrue)调试时显示 Excel正式批量处理时隐藏 Excel这是比较稳的实践方式。6. 常见问题为什么脚本能跑但结果不对xlwings 操作 Excel 时最怕的不是脚本直接报错而是脚本看起来运行成功但数据写到了错误的工作表或错误的单元格。这种问题如果没有打开文件检查很容易被忽略。第一个常见问题是选错工作表。比如代码写的是wb.sheets[0]但第一张表并不是目标表结果数据写到了不该写的位置。如果工作簿结构不稳定不建议长期依赖索引选表。第二个常见问题是表名变化。别人发来的文件可能把Sheet1改成了数据或者中文表名里多了空格。脚本中表名写死后就容易报错或找不到目标表。第三个常见问题是写入区域不匹配。比如你想写入二维列表但数据的行列数量和目标区域预期不一致最终在 Excel 里展开的位置可能和你想的不一样。我的建议是写入前先确认目标表名写入后再读取关键单元格验证。比如写入 A1 后马上读取 A1 的值确认结果是否正确。sht.range(A1).value已处理check_valuesht.range(A1).valueprint(A1 当前值,check_value)验证不是多余步骤它是办公自动化脚本能不能稳定落地的关键。尤其是处理真实报表时不要只看控制台有没有报错还要打开结果文件检查关键位置。7. 总结提升从打开 Excel 到真正控制 Excel这一节我最后记成一句话xlwings 的价值不是让 Python 打开 Excel而是让 Python 像人一样选择工作表、写入单元格、生成新的工作表。选表解决的是“操作哪张表”的问题写入单元格解决的是“把数据放到哪里”的问题新增工作表解决的是“结果如何组织”的问题。三个动作组合起来就能完成很多基础报表自动化任务。对 Python Excel 办公自动化来说这一节是一个很重要的分界点。前面更多是文件层面的操作而这里开始进入 Excel 内部对象工作簿、工作表、单元格。理解这些对象之间的关系比单纯背代码更重要。如果只是复制代码却不知道当前操作的是哪个工作簿、哪张工作表、哪个单元格真实工作中一定会出问题。因为办公文件往往不是标准模板表名可能不同单元格位置可能变化文件也可能被占用。我的建议是每次写 xlwings 脚本都先画清楚对象链路。也就是app控制 Excel 应用wb代表工作簿sht代表工作表range代表单元格区域。这个链路清楚了后面的代码才不会乱。 返回顶部点击回到顶部

相关新闻