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

《超简单:用 Python 让 Excel 飞起来》读书笔记:3.3.1 创建工作簿:xw.App() 与 app.books.add())


🔥个人主页:杨利杰YJlio
❄️个人专栏:《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》
《微信助手》 《锤子助手》 《Python》 《Kali Linux》
《那些年未解决的Windows疑难杂症》
🌟让复杂的事情更简单,让重复的工作自动化


@[TOC](《超简单:用 Python 让 Excel 飞起来》读书笔记:3.3.1 创建工作簿:xw.App() 与 app.books.add())

1. 3.3.1 创建工作簿:xw.App() 与 app.books.add()

V4修正版进度标记:本篇为 06月11日 第1篇,承接 06月07日第2篇“2.7.2 自定义函数”之后继续更新。

这一篇是我阅读《超简单:用 Python 让 Excel 飞起来》时整理的读书笔记,对应书籍中的第3章 Python模块 / 3.3.1 创建工作簿。从这一节开始,内容已经进入xlwings的核心使用场景:用 Python 直接控制本机 Excel。

前面学习路径、模块、字符串、函数时,更多是在为自动化脚本打基础。而到了xw.App()app.books.add(),就开始真正让 Python 操控 Excel 程序:启动 Excel、创建工作簿、获取工作表、写入单元格。这个阶段如果对象层级没理解清楚,后面保存文件、关闭进程、批量处理工作簿时很容易乱。

我把本节核心压缩成两句话:xw.App()负责启动 Excel 应用;app.books.add()负责在这个 Excel 应用里新建一个工作簿。一个是“打开 Excel 程序”,一个是“创建 Workbook 对象”。

我的理解是:xlwingsopenpyxlpandas最大的区别在于,它不是单纯读写文件,而是可以真正控制本机 Excel 应用。

这张图展示的是 Python 通过xlwings启动本机 Excel 应用的过程。左侧是import xlwings as xwapp = xw.App(),右侧是被 Python 拉起的 Excel 窗口。

从图中可以看出,xw.App()并不是创建一个 Excel 文件,而是先启动一个 Excel 程序实例。后面所有新建工作簿、写入单元格、关闭进程的动作,都是在这个 Excel 应用实例上继续完成的。

2. 为什么要先理解 App 和 Workbook

很多新手第一次接触xlwings,会直接记住两行代码:app = xw.App()wb = app.books.add()。这样当然能跑,但只会跑通不代表真的理解。后面一旦涉及多个工作簿、隐藏运行、保存文件、进程残留,问题就会集中暴露出来。

xlwings里,App可以理解为一个 Excel 程序实例;Workbook是工作簿;Sheet是工作表;Range是单元格或单元格区域。你平时手动操作 Excel 时,也是先打开 Excel,再打开或新建工作簿,然后选中工作表,最后操作单元格。

推荐先记住这条对象链:App → Workbook → Sheet → Range。这条链路理解清楚后,后面学习读取、写入、保存、关闭都会顺很多。

Python 脚本

xw.App 启动 Excel 应用

app.books 工作簿集合

app.books.add 新建工作簿

wb.sheets 获取工作表

sht.range 定位单元格

写入或读取数据

这张流程图可以把xlwings的对象层级串起来。它不是一上来就操作单元格,而是逐层进入:先定位 Excel 应用,再定位工作簿,再定位工作表,最后定位单元格区域。

不要只背代码。如果不知道appwbsht分别代表什么,后面脚本一复杂,变量就会变成一堆看不懂的符号。

3. 准备工作:导入 xlwings 模块

使用xlwings之前,首先要导入模块。惯例写法如下:

importxlwingsasxw

xwxlwings常用别名。这个别名不是必须的,但实际写脚本时比较顺手,后面调用xw.App()xw.Book()等方法会更简洁。

如果运行时报错提示没有找到xlwings,可以先安装:

pipinstallxlwings

这里要注意一个现实问题:如果电脑里有多个 Python 环境,安装成功不代表当前脚本环境一定能用。比如 PyCharm、VS Code、Anaconda、系统自带 Python 都可能指向不同解释器。此时要先确认当前运行脚本的解释器和安装模块的解释器是否一致。

常见误区:看到pip install xlwings成功,就以为所有 Python 环境都能导入。实际上,模块是安装到某个具体 Python 环境里的。

最小验证代码如下:

importxlwingsasxwprint("xlwings 导入成功")

如果这段代码可以正常输出,就说明模块导入没有问题,可以继续测试启动 Excel。

4. xw.App():启动 Excel 应用

xw.App()的作用是启动一个 Excel 应用实例。这个动作非常接近手动双击 Excel 图标,只是现在由 Python 发起。

最基础的写法如下:

importxlwingsasxw app=xw.App()

执行后,系统通常会打开一个 Excel 程序窗口。变量app保存的就是这个 Excel 应用对象,后续新建工作簿、打开已有工作簿、关闭 Excel,都可以通过它继续操作。

可以这样理解:app = xw.App()是“启动 Excel 程序环境”,不是“保存一个 Excel 文件”。真正的新建工作簿,要等到app.books.add()

如果打开任务管理器,通常可以看到对应的EXCEL.EXE进程。这也是xlwings和很多纯文件读写库不同的地方:它会真的启动 Excel 进程,所以脚本结束时必须考虑关闭。

风险提醒:如果脚本反复运行,但没有关闭 Excel,后台可能残留多个EXCEL.EXE,后续可能造成文件被占用、保存失败或资源占用升高。

5. visible 参数:调试时看得见,跑批时可隐藏

xw.App()里有一个非常常用的参数:visible。它决定 Excel 窗口是否显示出来。

调试阶段,我更建议写成:

app=xw.App(visible=True)

这样 Excel 会显示出来。代码有没有启动 Excel、工作簿有没有创建、单元格有没有写入,都可以直接看见。对于刚学xlwings的阶段,这种方式最稳。

正式跑批时,可以写成:

app=xw.App(visible=False)

这样 Excel 会在后台运行,不会弹出窗口干扰用户操作。比如批量生成报表、定时处理 Excel、后台自动导出结果时,这种方式更适合。

这张图展示的是visible=Truevisible=False的区别。左侧是调试模式,Excel 窗口可见;右侧是跑批模式,Excel 在后台由 Python 控制。

从图中可以看出,visible=True更适合学习和排错,因为你能直接看到 Excel 中发生了什么;visible=False更适合正式运行,因为它更安静,也更接近自动化脚本的实际运行方式。

我的习惯是:调试时先用visible=True,确认逻辑没问题后,再改成visible=False做正式跑批。

不要一开始就后台运行。新手阶段如果直接使用visible=False,一旦脚本出错,很难判断 Excel 到底有没有启动、工作簿有没有创建、内容有没有写入。

6. app.books.add():新建一个工作簿

启动 Excel 应用后,下一步就是新建工作簿。这里用到的代码是:

wb=app.books.add()

这行代码可以拆开理解:app是 Excel 应用;books是这个 Excel 应用里的工作簿集合;add()表示新增一个工作簿;wb接收返回的工作簿对象。

这张图展示的是app.books.add()新建工作簿的过程。左侧是app → books → add() → wb的对象链路,右侧是新建出来的空白 Excel 工作簿。

从图中可以看出,wb不是字符串,也不是文件路径,而是一个工作簿对象。拿到wb后,才能继续获取工作表、写入单元格、保存文件或关闭工作簿。

对象理解很重要:app.books.add()的结果是 Workbook 对象,不是已经保存到磁盘上的 Excel 文件。只有执行保存动作后,文件才会真正落到指定路径。

最小示例如下:

importxlwingsasxw app=xw.App(visible=True)wb=app.books.add()print("工作簿已创建")

运行后,你会看到 Excel 中出现一个新的空白工作簿。此时它还没有写入内容,也还没有保存文件。

推荐做法:新建工作簿后,尽快明确后续动作:是写入数据、保存文件,还是只是临时测试。不要让工作簿对象长期悬空。

7. 完整示例:启动 Excel、新建工作簿、写入 A1 到 A3

只会启动 Excel 和新建工作簿还不够,真正的自动化价值在于写入数据。下面这个例子适合作为入门模板:启动 Excel,新建工作簿,获取第一张工作表,然后向 A1、A2、A3 写入测试内容。

importxlwingsasxw# 1. 启动 Excel,调试阶段建议显示窗口app=xw.App(visible=True)# 2. 新建一个工作簿wb=app.books.add()# 3. 获取第一张工作表sht=wb.sheets[0]# 4. 写入单元格sht.range("A1").value="Hello xlwings!"sht.range("A2").value=123sht.range("A3").value=["Python","Excel","自动化"]print("工作簿已创建并写入内容")

这段代码里,wb.sheets[0]表示获取第一个工作表,sht.range("A1").value表示定位 A1 单元格并写入内容。A3 写入的是一个列表,xlwings会把它横向写入到相邻单元格中。

这张图展示的是完整示例的执行效果。左侧是写入代码,右侧是 Excel 中 A1、A2、A3 单元格的实际写入结果。

从图中可以看出,代码执行后,Excel 中已经出现了Hello xlwings!、数字123,以及PythonExcel自动化这些测试内容。这个结果说明App → Workbook → Sheet → Range的对象链路已经跑通。

验证重点:不要只看控制台有没有输出,还要确认 Excel 窗口里对应单元格是否真的写入了内容。

学习建议:第一次练习时不要急着处理真实业务文件,先用 A1、A2、A3 这种小例子跑通对象层级。

8. 为什么要理解对象层级:App → Workbook → Sheet → Range

xlwings的难点不在于语法有多复杂,而在于对象层级。很多新手写到后面会混淆appwbshtrange,最后不知道自己操作的是 Excel 应用、工作簿、工作表,还是某个单元格。

我建议把它类比成真实办公桌上的 Excel 操作:App是 Excel 程序本身;Workbook是打开的某个 Excel 文件;Sheet是文件里的工作表;Range是具体单元格或单元格区域。

App:Excel 程序

Workbook:工作簿

Sheet:工作表

Range:单元格区域

Value:写入或读取数据

如果你要写入 A1,路径不是凭空出现的,而是先有 Excel 应用,再有工作簿,再有工作表,最后才是 A1 单元格。

app=xw.App(visible=True)wb=app.books.add()sht=wb.sheets[0]sht.range("A1").value="Hello xlwings!"

这里真正要理解的是:每一行代码都在往更具体的对象下钻。先定位应用,再定位工作簿,再定位工作表,最后定位单元格。

这个层级理解清楚后,后续学习保存工作簿、打开已有文件、读取区域、批量写入数据时,就不会感觉每一节都是新东西。它们本质上都在这个对象树里移动。

9. 常见坑:脚本结束后 Excel 不会自动关

xlwings新手最容易踩的坑,就是脚本执行完了,但 Excel 进程还在后台挂着。尤其是使用visible=False时,窗口看不见,容易误以为 Excel 已经退出。实际上任务管理器里可能还残留EXCEL.EXE

这张图展示的是忘记关闭 Excel 进程的风险。左侧是正确关闭工作簿和退出应用的代码,右侧是任务管理器中残留多个EXCEL.EXE进程的场景。

从图中可以看出,如果只创建AppWorkbook,但没有执行关闭动作,Excel 进程可能会不断堆积。时间长了以后,可能出现文件被占用、保存失败、Excel 打不开、系统资源占用升高等问题。

风险提醒:xlwings脚本一定要养成关闭习惯。创建了App,就要考虑什么时候app.quit();创建了Workbook,就要考虑什么时候wb.close()

最基础的关闭写法如下:

wb.close()app.quit()

更稳一点的写法,是使用try...finally。这样即使中间写入数据时报错,也能尽量关闭 Excel。

importxlwingsasxw app=xw.App(visible=True)wb=Nonetry:wb=app.books.add()sht=wb.sheets[0]sht.range("A1").value="Hello xlwings!"finally:ifwbisnotNone:wb.close()app.quit()

推荐做法:调试阶段可以先保留 Excel 窗口观察结果;正式脚本中必须设计关闭逻辑,避免残留进程。

注意:如果工作簿内容还没保存,直接wb.close()可能会丢失结果。保存工作簿需要在后续学习中单独处理。

10. 效果验证:如何确认这节内容真的跑通了

这一节不能只用“代码没有报错”来判断是否成功。因为xlwings涉及本机 Excel,如果只看控制台,很容易忽略 Excel 是否真的启动、工作簿是否真的创建、单元格是否真的写入、进程是否已经关闭。

我建议按四个点检查。第一,看 Excel 是否启动;第二,看工作簿是否创建;第三,看 A1 到 A3 是否写入测试内容;第四,看脚本结束后 Excel 进程是否被正确关闭。

验证的核心不是“跑完”,而是确认每个对象状态都符合预期:App 已启动,Workbook 已创建,Sheet 可访问,Range 已写入,最后进程能关闭。

可以用下面这个版本作为学习阶段的完整验证脚本:

importxlwingsasxw app=xw.App(visible=True)wb=Nonetry:wb=app.books.add()sht=wb.sheets[0]sht.range("A1").value="Hello xlwings!"sht.range("A2").value=123sht.range("A3").value=["Python","Excel","自动化"]print("Excel 已启动")print("工作簿已创建")print("A1~A3 已写入测试内容")finally:ifwbisnotNone:wb.close()app.quit()print("Excel 已关闭")

这段脚本的价值在于,它把“启动、创建、写入、关闭”都串在一起。学习阶段可以先观察 Excel 窗口里的变化,确认对象链路跑通后,再继续学习保存工作簿、打开已有文件和批量写入数据。

这类验证脚本适合初学阶段反复练习。不要急着把它改成复杂业务脚本,先确认最小链路稳定。

11. 总结提升

这一节的核心,是掌握xlwings操作 Excel 的开局两件套:xw.App()app.books.add()。前者负责启动 Excel 应用,后者负责在这个应用里创建新的工作簿。

如果只从代码层面记忆,这一节很简单;但如果从自动化脚本稳定性的角度看,这一节非常关键。只要使用xlwings,就必须考虑 Excel 是否可见、工作簿对象是否正确、工作表是否拿到、单元格是否写入,最后 Excel 进程是否关闭。

我把这一节压缩成三句话:第一,xw.App()是启动 Excel 应用,不是新建文件;第二,app.books.add()是新建工作簿对象,不等于已经保存到磁盘;第三,写完脚本必须考虑wb.close()app.quit(),否则可能残留 Excel 进程。

真正容易翻车的地方,不是新建工作簿,而是忘记关闭进程、没有保存结果、对象层级混乱。

我的建议是:后续写xlwings脚本时,固定按“启动 App → 创建或打开 Workbook → 操作 Sheet / Range → 保存 → 关闭 Workbook → 退出 App”的流程写。

最后我把xlwings这一节记成一句话:**Python 不是在旁边看 Excel,而是在真正控制 Excel;既然控制了它,就要负责把它正确关闭。**


返回顶部

http://www.cnnetsun.cn/news/2674787.html

相关文章:

  • 联想刃7000K BIOS隐藏选项一键解锁指南:3分钟释放硬件全部潜能
  • Arduino超声波入侵检测系统:从传感器原理到安防原型实践
  • 鸣潮自动化助手:释放双手,轻松享受游戏乐趣
  • 保姆级教程:用kubeadm和Calico Operator快速搞定K8s集群网络(附calicoctl配置)
  • FinalBurn Neo技术深度解析:构建精准的街机游戏模拟器架构
  • Bedrock Launcher终极指南:轻松管理Minecraft基岩版多版本切换
  • 基于ESP32的蓝牙翻页器DIY:从电路设计到3D打印外壳全流程
  • 073柱状图中最大的矩形
  • MegSpot:5个高效技巧助你掌握跨平台视觉分析工具
  • MegSpot终极指南:高效专业的多媒体对比分析工具
  • 基于树莓派与HX711的智能饮水提醒系统:从传感器到完整IoT项目实践
  • 甲言(Jiayan):古汉语NLP处理的革命性突破与实战指南
  • 华硕笔记本轻量控制神器G-Helper:告别臃肿Armoury Crate的终极解决方案
  • 基于Arduino Uno与1602 LCD的复古像素游戏开发实战
  • QMCDecode:Mac用户终极免费工具,快速解锁QQ音乐加密音频文件
  • 【监管合规优先的Gemini年报工作流】:嵌入证监会/SEC双准则校验模块的6层风险拦截机制
  • Win-PS2EXE终极指南:3分钟将PowerShell脚本变专业Windows程序
  • 英雄联盟Akari助手:从手动操作到智能辅助的完整技术指南
  • 从‘42欧姆’和‘55欧姆’说起:聊聊同轴电缆阻抗不标准背后的那些事儿(附TDR实测)
  • 9大网盘下载助手:告别限速困扰,一键获取真实下载链接
  • 基于构件的软件开发模型
  • 基于Playwright与FFmpeg的会议自动化工具:Zoombot实现原理与实践
  • 从ArtStation大神作品反推:用Substance Designer制作PBR丝绸贴图并在Unity中还原
  • RevitLookup终极指南:深度解析BIM数据透视与调试技术
  • 树莓派蓝牙自动连接与音频播放系统:智能家居场景化应用实践
  • 如何快速掌握G-Helper:3个实用技巧让你的华硕笔记本性能翻倍
  • 3分钟恢复Windows 11任务栏拖放功能:开源修复工具的完整解决方案
  • 经验总结与未来展望:Function Calling 工具生态的演进方向
  • DIY金属弹药箱硬盘阵列:打造坚固便携的四盘位移动存储中心
  • 电力系统恶意数据检测:基于SMOTE与XGBoost集成的不平衡分类实战