
背景Excel 是全球最普及的数据分析工具拥有公式、透视表、Power Query 等强大功能。然而传统 Excel 编程语言如 VBA运行在本地电脑上对于复杂的数据分析有些力不从心。Python 是数据科学领域的标准语言拥有丰富的数据处理和机器学习库。将 Python 集成到 Excel 中可以让用户在不离开 Excel 环境的前提下借助 Python 的能力完成更高级的数据分析任务。Python in Excel简称 PiE正是微软给出的答案。它将 Python 深度嵌入 Excel让用户可以直接在单元格中编写 Python 代码无需安装 Python、无需配置环境。数据流代码去了哪里理解 PiE 的关键就是明白 Python 代码并不在本地执行。当用户在 Excel 单元格中输入PY(...)公式时整个数据流如下Excel 将 Python 代码与所需数据打包一起发送到 Microsoft Azure 云端因此可用 Internet 连接是必须的Azure 为该任务分配一个独立的隔离容器secured container容器执行 Python 代码处理数据执行结果返回 Excel填入对应单元格整个过程对用户来说是透明的——只需要一个网络连接就能使用完整的 Python 环境。核心函数xl() 和 PY()粗略的讲PiE 中只有两个核心函数需要掌握PY()负责触发 Python 代码执行。在任意单元格输入PY(...)按 CtrlEnter 完成输入该单元格就会成为 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 公式并按 CtrlEnter 完成输入PY(xl(A1:B7, headersTrue)[销售额].mean())几秒后D4 单元格同样显示结果12000与 Excel 原生公式结果一致。代码解析PY(xl(A1:B7, headersTrue)[销售额].mean())这是一个完整的 Excel 公式下面对其逐层解析xl(A1:B7, headersTrue)xl()是 PiE 的核心数据函数。“A1:B7” 指定读取第 1 行到第 7 行的两列数据表范围包含表标题行。headersTrue参数告诉 xl() 将第一行识别为列标题执行后数据以 Pandas DataFrame 形式返回B 列自动映射为销售额这一列名。[销售额]方括号按列名从 DataFrame 中取出销售额列即 B2:B7 的 6 个数值。.mean()对取出的列调用.mean()方法计算这 6 个数值的平均值结果为 12000。PY(...)最外层的PY()是 Excel 公式作用是触发 Python 代码执行并将 Python 返回值自动填入当前单元格。整个公式中无需指定输出位置Python 最后一层的计算结果就是单元格的显示内容。多行写法PiE 公式支持换行编写在单元格内按 AltEnter 即可换行。上面单行公式改写为多行如下dfxl(A1:B7,headersTrue)avgdf[销售额].mean()avg多行写法中第1行读取数据第2行计算均值最后一行avg的值即为单元格显示结果。代码也可以使用列索引指定数据列 Python 中编号都是从 0 开始因此 1 代表第二列。dfxl(A1:B7)avgdf[1].mean()avg总结PiE 的使用范式非常简单总共分三步用xl()读取 Excel 中的数据用 Python 处理数据代码最后一行的返回值自动填入单元格对于已有 Excel 基础的用户来说只需要记住两个核心函数和这一条返回规则就可以开始使用 Python 处理数据。后续文章将逐步展开xl()的更多用法和 Python 数据处理技巧。