【002】Excel中直接写Python代码是怎么做到的?

📅 2026/7/29 15:07:58 👁️ 阅读次数 📝 编程学习
【002】Excel中直接写Python代码是怎么做到的?

背景

Excel 是全球最普及的数据分析工具,拥有公式、透视表、Power Query 等强大功能。然而,传统 Excel 编程语言(如 VBA)运行在本地电脑上,对于复杂的数据分析有些力不从心。

Python 是数据科学领域的标准语言,拥有丰富的数据处理和机器学习库。将 Python 集成到 Excel 中,可以让用户在不离开 Excel 环境的前提下,借助 Python 的能力完成更高级的数据分析任务。

Python in Excel(简称 PiE)正是微软给出的答案。它将 Python 深度嵌入 Excel,让用户可以直接在单元格中编写 Python 代码,无需安装 Python、无需配置环境。

数据流:代码去了哪里?

理解 PiE 的关键,就是明白 Python 代码并不在本地执行。

当用户在 Excel 单元格中输入=PY(...)公式时,整个数据流如下:

  1. Excel 将 Python 代码与所需数据打包,一起发送到 Microsoft Azure 云端,因此可用 Internet 连接是必须的
  2. Azure 为该任务分配一个独立的隔离容器(secured container)
  3. 容器执行 Python 代码,处理数据
  4. 执行结果返回 Excel,填入对应单元格

整个过程对用户来说是透明的——只需要一个网络连接,就能使用完整的 Python 环境。

核心函数:xl() 和 PY()

粗略的讲,PiE 中只有两个核心函数需要掌握:

PY()负责触发 Python 代码执行。在任意单元格输入=PY(...),按 <Ctrl+Enter> 完成输入,该单元格就会成为 Python 代码的输出显示区。

xl()是 Python 端读写 Excel 数据的唯一入口。数据通过xl()传入 Python 后,会以 Pandas DataFrame 的形式存在,可以直接使用 Python 的所有数据处理能力。

这两者的配合就是 PiE 的全部逻辑:用户通过xl()获取数据(某些场景中数据是 Python 创建的),用 Python 处理数据,Python 最后一行的返回值自动显示在=PY()所在的单元格中。

安全机制

为什么 PiE 选择云端执行,而不是本地执行?数据安全有保障吗?

Python 是开源语言,由全球开发者共同维护,微软无法控制其代码内容。

为解决这个潜在的隐患,PiE 将 Python 放在 Azure 隔离容器中运行,并对代码能力做了严格限制:

  • 只能使用微软预审核过的库,不能随意 import 任意模块
  • 不能访问本地电脑文件、设备、网络
  • 只能通过xl()读写 Excel 数据,不能操作本地系统
  • 关闭工作簿后,容器及其中所有数据立即销毁

这些限制保证了 PiE 的安全性,用户可以放心使用 Python 处理敏感数据,而不必担心恶意代码风险。

示例:计算平均销售额

工作表 A 列是门店名称,B 列是对应的销售额,数据分布如下:

A列B列
门店销售额
门店A12,580
门店B9,800
门店C15,320
门店D8,700
门店E11,200
门店F14,400

先用 Excel 原生的 AVERAGE 函数计算平均值,D1单元格输入如下公式并回车:

=AVERAGE(B2:B7)

结果显示12000

然后在 D4 单元格输入以下 Python 公式,并按 <Ctrl+Enter> 完成输入:

=PY(xl("A1:B7", headers=True)["销售额"].mean())

几秒后,D4 单元格同样显示结果12000,与 Excel 原生公式结果一致。

代码解析

=PY(xl("A1:B7", headers=True)["销售额"].mean())这是一个完整的 Excel 公式,下面对其逐层解析:

xl("A1:B7", headers=True)

xl()是 PiE 的核心数据函数。“A1:B7” 指定读取第 1 行到第 7 行的两列数据表,范围包含表标题行。headers=True参数告诉 xl() 将第一行识别为列标题,执行后数据以 Pandas DataFrame 形式返回,B 列自动映射为销售额这一列名。

["销售额"]

方括号按列名从 DataFrame 中取出销售额列,即 B2:B7 的 6 个数值。

.mean()

对取出的列调用.mean()方法,计算这 6 个数值的平均值,结果为 12000。

=PY(...)

最外层的=PY()是 Excel 公式,作用是触发 Python 代码执行,并将 Python 返回值自动填入当前单元格。整个公式中无需指定输出位置,Python 最后一层的计算结果就是单元格的显示内容。

多行写法

PiE 公式支持换行编写,在单元格内按 <Alt+Enter> 即可换行。上面单行公式改写为多行如下:

df=xl("A1:B7",headers=True)avg=df["销售额"].mean()avg

多行写法中,第1行读取数据,第2行计算均值,最后一行avg的值即为单元格显示结果。

代码也可以使用列索引指定数据列, Python 中编号都是从 0 开始,因此 1 代表第二列。

df=xl("A1:B7")avg=df[1].mean()avg

总结

PiE 的使用范式非常简单,总共分三步:

  1. xl()读取 Excel 中的数据
  2. 用 Python 处理数据
  3. 代码最后一行的返回值自动填入单元格

对于已有 Excel 基础的用户来说,只需要记住两个核心函数和这一条返回规则,就可以开始使用 Python 处理数据。后续文章将逐步展开xl()的更多用法和 Python 数据处理技巧。