Python in Excel 功能特性与使用心得
获得 Python in Excel 的预览版之后,用户便可以在任意 Excel 单元格里敲写 =py( 来执行 Python 代码。不过目前 Python in Excel 并没有专门的官方文档,仅有基础的 Get Started 教程,其余多为 pandas、matplotlib、seaborn 等库的通用文章,与 Python in Excel 的具体环境结合并不紧密。因此刚进入 Python in Excel 时,对这个新环境会有很多疑问。本文主要分享一些深入的理解和使用心得,帮助开发者更好地利用这一工具。
从单元格取值
在 Python in Excel 中,我们可以使用 xl() 函数获取数据。该函数支持从单个单元格、列、行乃至整个 Sheet 中读取数据。如果要获取其他 Sheet 中的数据,可以按照 xl('SheetName!A1:B2') 这样的方式编写地址。
如果 xl() 函数引用的值的范围超过了一个单元格,它返回的值是一个 DataFrame 对象,这使得数据处理更加便捷。例如:
import xl
df = xl('Data!A1:D100')
print(df.head())
如果在 Excel 中多单元格设置了类型(如 Category),那么 xl() 返回的 DataFrame 中的数据类型会对应管辖如下所示:

这意味着在处理日期、文本或数值时,无需手动转换类型,系统会根据 Excel 的单元格格式自动推断。但需要注意的是,混合类型的列可能会导致 Pandas 将其统一转换为 Object 类型,建议在导入前尽量保持列内数据类型一致。
Python 运行时架构
Python in Excel 的 Python 运行时(Runtime)是部署在云端的。所以在 Excel 中敲下 Ctrl + Enter 时,Excel 中的代码和数据都会被传送到云端执行,执行完成后从云端取回结果。这种架构带来了便利,但也引入了网络延迟和隐私考量。
从 Excel 菜单的 Formulas -> Python -> Initialization,我们可以看到这个运行时是如何被初始化的,有哪些库会被默认加载,哪些默认值会被设置。这允许用户在特定工作簿级别配置环境变量。

除了像 numpy, pandas(其他你可以 import 的库可以参考官方文档)这些常用的数据处理库之外,excel 这个库(或者应该被称作一个依赖)主要负责 Excel 中的数据转换,以及 Excel 与 Microsoft Cloud 的数据传输等任务。比如:用于从 Excel 的 sheet 中获取数据的 xl() 函数;你也可以通过 excel.uploadeddata.get_runtime_id() 函数来获取一个当前 Python 运行时的 UUID。
我没有找到微软官方关于 excel 这个库的详细文档,建议以后在进一步挖掘其内部 API。值得注意的是,一个打开的 Excel 文档中的全部 Sheet 以及 Sheet 中的全部单元格都会共享同一个 Python 运行时。这就意味着如果你在任意一个单元格中声明的函数、变量和类,都可以在其他的单元格的代码中引用到。这种状态共享机制非常适合构建复杂的数据处理流水线,但也需要注意变量污染问题。
举个例子,定义一个全局辅助函数:



