《超简单:用 Python 让 Excel 飞起来》读书笔记:9.2.1 通过命令创建文件并调用 Python 自定义函数
个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化《超简单用 Python 让 Excel 飞起来》读书笔记9.2.1 通过命令创建文件并调用 Python 自定义函数1. 问题背景与写作目标2. 适用场景与限制条件3. 核心原理xlsm、py、xlwings 三件套4. 手动创建工程目录与文件4.1 使用 PowerShell 创建目录4.2 手动创建 xlsm 工作簿5. 编写 Python 自定义函数6. 在 VBA 中调用 Python 自定义函数6.1 打开 VBA 编辑器6.2 推荐写法sys.path.append 指定脚本目录6.3 更适合交付的写法从 Config 工作表读取路径7. 运行宏并验证结果7.1 成功后应该看到什么8. 常见问题与踩坑记录8.1 提示找不到 demo 模块8.2 提示没有 xlwings 模块8.3 宏被禁用8.4 32 位与 64 位兼容问题9. 效果验证不要只看“有没有报错”10. 我的总结提升11. 发布版补充我建议这样使用这篇笔记1. 问题背景与写作目标在 Excel 自动化里很多人一开始喜欢用 xlwings quickstart 快速生成工程因为它确实方便命令一敲工作簿、Python 文件、基础结构都帮你准备好了。但在真实办公环境里事情往往没有这么顺。比如企业电脑权限受限、宏策略严格、工程目录必须放在指定路径、Excel 文件已经存在或者你不想让工具自动生成一堆自己不清楚用途的文件。这时继续依赖 quickstart反而会让工程变得不可控。所以本篇的核心目标就是手动搭建一套 Excel Python 调用闭环自己创建 xlsm 工作簿自己创建 py 脚本再通过 VBA 的 RunPython 调用 Python 自定义函数最后把处理结果写回 Excel。这张图展示了本文要实现的整体效果Excel 作为入口Python 作为处理引擎xlwings 作为桥梁把“点击按钮执行自动化”的流程串起来。从这张图中我们可以看出这套方案的关键不是“代码有多复杂”而是工程结构要清楚Excel 负责触发Python 负责计算结果再回到 Excel 展示。这比单独写一个 Python 脚本更适合交付给非技术同事使用。2. 适用场景与限制条件这套手动模式适合以下几类场景已经有现成 Excel 模板不方便用 quickstart 重新生成公司环境限制命令行生成文件Python 脚本需要放在固定工程目录、Git 目录或共享盘目录想把 Excel 做成一个“操作界面”让用户点按钮即可执行 Python想明确控制 VBA、Python、配置路径、输出结果之间的关系。推荐使用手动模式的核心原因是可控。你知道每个文件是自己创建的也知道 VBA 为什么能找到 Python 脚本后期排障不会陷入“工具自动生成了什么我也不清楚”的尴尬。但要注意这套方案依赖 Excel 宏、xlwings、Python 环境。如果企业电脑禁用宏或者当前 Excel 调用的 Python 环境没有安装 xlwings就会执行失败。因此本文不是“零环境依赖”的方案而是“工程结构更可控”的方案。3. 核心原理xlsm、py、xlwings 三件套先不要急着写代码先把结构搞清楚。手动模式的最小闭环只需要三个关键对象Excel 宏工作簿demo.xlsmPython 脚本文件demo.pyxlwings 桥接能力VBA 中通过RunPython调用 Python本质上Excel 并不是直接执行 Python而是通过 xlwings 提供的 VBA 接口把执行请求交给 Python 解释器。Python 执行完成后再通过 xw.Book.caller() 找回当前工作簿把结果写回指定 Sheet。这张图展示了手动模式的核心结构xlsm py xlwings 三件套共同构成 Excel 调用 Python 的基础链路。从这张图中可以看出Excel 和 Python 不是谁替代谁而是分工协作Excel 更适合做人机交互和结果展示Python 更适合做数据处理和自动化逻辑。这也是办公自动化最常见、最容易落地的架构。可以用下面这张流程图理解调用过程用户打开 demo.xlsm点击按钮或执行宏VBA 调用 RunPythonsys.path 指向 Python 脚本目录import demo 并执行 demo.mainPython 读取 Excel 数据Python 处理数据结果写回 Report 工作表用户在 Excel 中查看结果4. 手动创建工程目录与文件我建议先把目录结构固定下来不要把 Excel 和 Python 文件随便丢在桌面。目录一乱后面 import 找不到模块、路径写错、同事迁移失败都会变成低级但很烦的故障。推荐目录结构如下D:\ExcelPythonDemo\ ├─ demo.xlsm └─ py\ └─ demo.py这张图展示了手动创建工程文件的过程先创建宏工作簿再创建 Python 脚本并把两者放在同一个清晰的工程目录中。这一步的核心要点是不要只关注文件能不能运行还要关注后续是否容易维护。目录结构越清晰后面写 VBA 路径、迁移给同事、排查模块导入问题就越简单。4.1 使用 PowerShell 创建目录可以用 PowerShell 创建基础目录New-Item-ItemType Directory-PathD:\ExcelPythonDemo\py-Force如果你想顺手创建一个空的 Python 文件也可以继续执行New-Item-ItemType File-PathD:\ExcelPythonDemo\py\demo.py-Force4.2 手动创建 xlsm 工作簿Excel 宏工作簿建议手动创建打开 Excel新建空白工作簿点击“文件” → “另存为”文件类型选择Excel 启用宏的工作簿*.xlsm保存为D:\ExcelPythonDemo\demo.xlsm注意如果保存成 .xlsx后续 VBA 宏代码无法正常保存。要调用 Python必须使用支持宏的 .xlsm 文件。5. 编写 Python 自定义函数接下来在 D:\ExcelPythonDemo\py\demo.py 中写入 Python 代码。这里我用一个最容易理解的例子读取 Sheet1 中 A1:A20 的数值然后统计数量、总和、平均值、最大值、最小值最后写入 Report 工作表。先安装依赖pipinstallxlwingsPython 示例代码如下importxlwingsasxwdefsummarize(values): 将 Excel 读取到的数据转换成数值列表并计算基础统计结果。 nums[]ifisinstance(values,list):forrowinvalues:ifisinstance(row,list):forvinrow:ifvisNoneorv:continuetry:nums.append(float(v))exceptException:passelse:ifrowisNoneorrow:continuetry:nums.append(float(row))exceptException:passelse:try:nums.append(float(values))exceptException:passifnotnums:returnNonereturn{count:len(nums),sum:sum(nums),avg:sum(nums)/len(nums),max:max(nums),min:min(nums),}defmain(): Excel VBA 通过 RunPython 调用的入口函数。 wbxw.Book.caller()src_sheetSheet1src_rangeA1:A20out_sheetReport# 如果 Report 工作表不存在就自动创建sheet_names[s.nameforsinwb.sheets]ifout_sheetnotinsheet_names:wb.sheets.add(out_sheet)shtwb.sheets[src_sheet]valuessht.range(src_range).value resultsummarize(values)outwb.sheets[out_sheet]ifresultisNone:out.range(A1).value没有可用数值数据returnout.range(A1).value[[指标,值],[数量 count,result[count]],[总和 sum,result[sum]],[平均 avg,result[avg]],[最大 max,result[max]],[最小 min,result[min]],]这里最关键的是 xw.Book.caller()。它表示Python 不是随便打开一个 Excel 文件而是获取“当前调用它的那个工作簿”。这样 VBA 从 demo.xlsm 调用 Python 时Python 就能把结果写回当前文件。推荐把业务逻辑封装成函数。比如上面的 summarize() 只负责统计main() 只负责和 Excel 交互。这样以后你要替换业务逻辑不需要重写 Excel 调用部分。6. 在 VBA 中调用 Python 自定义函数Python 写完之后还差最关键的一步让 Excel 能找到并执行这个 Python 文件。这里要用 VBA 的 RunPython。这张图展示了 VBA 调用 Python 的核心链路Excel 中的宏先通过 sys.path.append 指向脚本目录再 import demo最后执行 demo.main()。从这张图中我们可以看出RunPython 本身不是难点真正容易出错的是路径。只要 Python 脚本目录没有被加入 sys.pathVBA 就很可能找不到 demo.py。6.1 打开 VBA 编辑器操作步骤打开demo.xlsm按Alt F11打开 VBA 编辑器插入一个标准模块写入下面的宏代码。6.2 推荐写法sys.path.append 指定脚本目录Option Explicit Sub RunPython_Manual() Python 脚本所在目录 Dim pyDir As String pyDir D:\ExcelPythonDemo\py RunPython import sys; _ sys.path.append(r pyDir ); _ import demo; _ demo.main() End Sub我更推荐这种写法。因为它不依赖系统环境变量也不要求你修改 PYTHONPATH。脚本在哪VBA 就明确指向哪排障时也更容易定位。注意import demo 对应的是 demo.py 文件名。如果你的文件叫 report_tool.py这里就要写 import report_tool不能乱改。6.3 更适合交付的写法从 Config 工作表读取路径如果你准备把这个文件交给同事使用不建议让他们改 VBA。更好的方式是在 Excel 中建一个 Config 工作表把 Python 脚本目录写在 B2 单元格中。Option Explicit Sub RunPython_ByConfig() Dim pyDir As String pyDir ThisWorkbook.Worksheets(Config).Range(B2).Value RunPython import sys; _ sys.path.append(r pyDir ); _ import demo; _ demo.main() End Sub这样同事迁移目录时只需要改 Excel 单元格不需要打开 VBA 编辑器。这就是从“自己能跑”走向“别人也能用”的关键一步。7. 运行宏并验证结果当 VBA 和 Python 都准备好后可以在 Sheet1 的 A1:A20 中随便输入一些数字例如10 20 30 40 50然后执行宏 RunPython_Manual。如果配置正确Python 会读取这些数据并在 Report 工作表中写入统计结果。这张图展示了最终的一键运行效果用户在 Excel 中点击运行宏Python 完成数据处理结果再写回 Excel 报表区域。从这张图中可以看出最终交付给用户的不是一段 Python 代码而是一个 Excel 操作入口。这才是办公自动化真正有价值的地方让复杂处理隐藏在按钮背后让使用者只关心结果。7.1 成功后应该看到什么成功运行后Report 工作表中应该出现类似结果指标 值 数量 count 5 总和 sum 150 平均 avg 30 最大 max 50 最小 min 10只要 Report 工作表能自动生成并且统计结果正确写入就说明 Excel → VBA → Python → Excel 的调用闭环已经跑通。8. 常见问题与踩坑记录8.1 提示找不到 demo 模块常见报错类似ModuleNotFoundError: No module named demo这个问题通常不是 Python 代码错了而是 VBA 没有正确指定脚本目录。重点检查sys.path.append(rD:\ExcelPythonDemo\py)路径必须指向 demo.py 所在的文件夹而不是 demo.py 文件本身。8.2 提示没有 xlwings 模块如果报错No module named xlwings说明当前 Excel 调用的 Python 环境没有安装 xlwings。处理方法是确认 Excel 使用的是哪个 Python 环境然后在对应环境中执行pipinstallxlwings很多人电脑里装了多个 Python命令行能跑不代表 Excel 调用的那个环境也能跑。这是最容易误判的地方。8.3 宏被禁用如果点击按钮没有反应或者 Excel 提示宏被禁用需要检查文件是否为.xlsm是否点击了“启用内容”信任中心是否允许宏文件是否位于受信任位置企业安全策略是否禁止 VBA 宏。企业环境中宏策略可能由管理员统一控制普通用户不一定有权限自行放开。这种情况下不要反复改代码应先确认策略边界。8.4 32 位与 64 位兼容问题如果环境比较老可能遇到 Office 位数、Python 位数不一致引发的问题。一般建议保持64 位 Office 64 位 Python32 位 Office 32 位 Python。新环境优先使用 64 位 Office 与 64 位 Python。除非公司旧系统有特殊兼容要求否则不要主动选择 32 位环境。9. 效果验证不要只看“有没有报错”很多新手验证脚本时只看有没有弹报错。这个标准太低了。真正的验证至少要看三层宏是否成功触发 PythonPython 是否读取到了正确的 Excel 区域结果是否按预期写回了目标 Sheet。建议你每次测试时都按下面这个最小验证清单执行验证项正确表现执行宏不出现 VBA 或 Python 报错Report 工作表自动创建或自动更新统计结果count、sum、avg、max、min 与源数据一致修改源数据后再次运行Report 结果同步变化移动工程目录后Config 路径修改后仍可运行只有源数据变化后结果也能重新计算并写回才说明这个自动化流程真正可复用。10. 我的总结提升这一节最值得记住的不是某一行 VBA 或 Python 代码而是这套工程化思路Excel 做入口Python 做处理xlwings 做桥梁最终把结果写回 Excel。相比 quickstart 自动生成工程手动模式的价值在于你能清楚知道每个文件的作用、每条路径为什么这么写、每一步失败时该查哪里。真正能交付的自动化不是“我电脑上能跑”而是“换一台电脑、换一个目录、换一个用户也能通过清晰配置跑起来”。如果只会复制 RunPython 代码但不能解释 sys.path、demo.py、main()、Book.caller() 分别解决什么问题后面一定会卡在环境迁移和排障上。所以我建议把本文这套结构沉淀成自己的 Excel Python 工程模板。以后无论是做数据清洗、批量生成报表、自动统计工单还是给同事做一个可点击的 Excel 工具都可以从这个模板继续扩展。11. 发布版补充我建议这样使用这篇笔记这一节在学习路径中的价值是从“Python 能处理 Excel”进一步走向“Excel 能调用 Python”。这一步很关键因为真实办公场景里不是每个同事都会打开命令行也不是每个用户都愿意运行 .py 文件。当你把 Python 能力封装到 Excel 按钮后使用门槛会明显降低。对使用者来说他只是在 Excel 里点了一下按钮但对开发者来说背后已经完成了路径配置、Python 调用、数据读取、业务处理和结果回写。我建议后续继续补两类内容一类是“如何把 Python 结果写成格式化报表”另一类是“如何把按钮、配置页、日志页做成完整的 Excel 工具界面”。这样这套读书笔记就不只是学习记录而是能沉淀成真正可复用的办公自动化工具库。返回顶部 返回顶部点击回到顶部

相关新闻

QT串口通信中C++20协程实现循环发送与状态控制

QT串口通信中C++20协程实现循环发送与状态控制

1. 项目概述:当QT串口遇上C20协程最近在做一个工控上位机的项目,核心需求之一就是通过串口与下位机(比如PLC、单片机)进行稳定可靠的数据通信。其中有一个典型的场景:需要周期性地向设备发送查询指令,比如每…

2026/7/18 5:46:13阅读更多 →
山西夏令营怎么选?一位家长的真实体验与选择心得

山西夏令营怎么选?一位家长的真实体验与选择心得

暑假临近,不少家长开始为孩子假期安排发愁:孩子沉迷手机、作业无人辅导、假期生活单调无趣。面对市场上种类繁多的山西夏令营,如何选择适合孩子的项目成为许多家庭的共同难题。本文基于一位家长的实际参与经历,分享选择山西夏令营…

2026/7/18 5:41:12阅读更多 →
Pygame迷宫生成与寻路:递归回溯与BFS算法的可视化实现

Pygame迷宫生成与寻路:递归回溯与BFS算法的可视化实现

1. 项目概述:不只是迷宫,而是一个算法与工程的微型沙盒最近在整理一些关于算法可视化的材料,想找一个既能体现算法思想,又具备完整工程实践的项目。一个基于 Pygame 的迷宫生成与寻路游戏,恰好完美地契合了这个需求。它…

2026/7/18 5:41:12阅读更多 →
前端HTTP请求:Fetch API与Axios对比指南

前端HTTP请求:Fetch API与Axios对比指南

1. 前端HTTP请求的两种主流方案在现代前端开发中,HTTP请求是与后端交互的核心手段。目前主流方案主要有两种:浏览器原生提供的Fetch API和第三方库Axios。这两种方案各有特点,适用于不同的开发场景。Fetch API作为现代浏览器原生支持的API&am…

2026/7/18 6:46:16阅读更多 →
数字IC与FPGA双投策略:简历优化与面试准备指南

数字IC与FPGA双投策略:简历优化与面试准备指南

1. 先搞清楚数字IC和FPGA到底能不能一起投很多人觉得数字IC和FPGA是两个完全不同的方向,投简历时必须二选一。但实际情况是,这两个岗位在技术栈上有大量重叠——Verilog/SystemVerilog、数字电路基础、仿真验证、时序分析这些核心技能是共通的。我见过不…

2026/7/18 6:46:16阅读更多 →
终极免费OCR工具Umi-OCR:5分钟打造你的本地文字识别工作站

终极免费OCR工具Umi-OCR:5分钟打造你的本地文字识别工作站

终极免费OCR工具Umi-OCR:5分钟打造你的本地文字识别工作站 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国…

2026/7/18 6:46:16阅读更多 →
Java程序阻塞排查:死锁、网络超时与数据库连接问题解决方案

Java程序阻塞排查:死锁、网络超时与数据库连接问题解决方案

在日常开发中,我们经常会遇到各种异常情况,其中“我走不了”这个看似口语化的表达,实际上对应着程序执行流程中的多种阻塞或中断状态。本文将深入探讨在Java多线程编程、网络通信、数据库操作等常见场景下,导致程序“走不了”的根…

2026/7/18 6:46:16阅读更多 →
OpenCore Legacy Patcher终极指南:3步让老旧Mac焕发新生,免费升级最新macOS

OpenCore Legacy Patcher终极指南:3步让老旧Mac焕发新生,免费升级最新macOS

OpenCore Legacy Patcher终极指南:3步让老旧Mac焕发新生,免费升级最新macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在…

2026/7/18 6:46:16阅读更多 →
半导体制造中的CPK指标解析与应用

半导体制造中的CPK指标解析与应用

1. 晶圆制程中的CPK究竟是什么?在半导体制造车间里,工程师们每天都要面对一个灵魂拷问:这条产线今天跑出来的芯片,良率能达标吗?这个问题的答案,很大程度上就藏在CPK这个神秘指标里。CPK(Proces…

2026/7/18 6:41:16阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/17 10:42:55阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/17 8:31:03阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/17 13:22:23阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/17 13:22:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →