EN
返回档案库

档案库 · 产品创意 · 产品决策 · 2014–2023

QueryStorm 在 Excel 中集成 C# IDE、运行时和应用商店,成为现代版 VBA

一位开发者在 .NET 上重构了 Excel 自动化:Roslyn IDE、对表格的类型化 LINQ、工作簿内嵌 DLL、NuGet 风格的应用商店。

QueryStorm

创意是什么打造 VBA 的继任者,微软不做我来做:由 Roslyn 驱动的 C# IDE、对 Excel 表格的类型化 LINQ,以及通过 NuGet 风格商店分发的工作簿内嵌应用。伤筋动骨

当时的题目

Excel automation still runs on VBA, which Microsoft is not planning to upgrade; its replacement, Office Scripts, is a sandboxed JavaScript environment aimed at the web version of Excel. A C# developer who had run QueryStorm since 2014 (originally SQL-only) decided that C# was the natural fit and built the successor himself.

它是怎么成立的

Excel 的脚本语言 VBA 并未现代化,微软明确的方向是 Office Scripts,一个面向电子表格网页版的沙盒化 JavaScript 环境。C# 开发者 Antonio Nakić-Alfirević 看到 JavaScript 无法替代桌面高级用户的 VBA——而微软致力于 JavaScript,不太可能亲自进入他所说的“Excel 中的有利可图的 C# 市场”。

QueryStorm 自 2014 年起就是他的项目,最初是在 Excel 内提供 SQL 支持;多年来他增加了 C# 脚本、自定义函数、NuGet、调试器和应用商店。技术核心是刻意现代化:微软 Roslyn 编译器驱动编辑、补全和错误高亮;每个 Excel 表格都有一个自动生成的强类型类,使得表格可以像内存集合一样用 LINQ 查询;自定义数据上下文在此基础上增加列类型和关系。

分发是构想的另一半。编译好的“工作簿应用”嵌入工作簿本身,因此一个成品工具以普通 .xlsx 文件传播,免费的 4MB QueryStorm 运行时即可运行。扩展更进一步,通过 NuGet 风格仓库分发,内置应用商店外加团队自托管选项,使得 C# 开发者可以像发布库一样发布 Excel 功能。

妙在哪

  • Roslyn 把难点——完整的 C# 编辑体验——变成了一个加载项可调用的库,单个开发者无需编写编译器即可提供 IDE。
  • 自动生成的表格类型将 Excel 重塑为类型化数据源,让用户用 LINQ 查询而非单元格坐标思考。
  • 将编译的 DLL 嵌入工作簿,使得分发单位就是文件本身,这正是 Excel 用户已习惯的共享方式。
  • 免费运行时加可自托管的仓库创造了不依赖微软加载项商店的分发渠道。
  • 从 2014 年 SQL 起步,使作者在押注 C# 层前了解了 Excel 集成问题的难点。

做出来什么

The Show HN on 25 January 2023 drew 670 points and 179 comments. Developers called it 'very, very useful', said LINQ suits data munging better than JavaScript, asked about the Excel-DNA/VSTO architecture, and one recognised the project from years earlier, when it went by the name ThingieQuery.

报道Read 'Replacing VBA with C#?'

可以借走的

当平台所有者放弃其高级用户语言时,这个空白就留给了那些基于平台自身数据模型和编译器基础设施构建的人——结果显得原生,而非强行附加。

后来

这篇文章作为产品主要介绍一直在线,发布帖子记录了反响:开发者讨论 Excel 是否应当原生支持 LINQ、F# 是否应有同样待遇,以及 Excel-DNA 运行时和 VSTO IDE 如何组装,作者逐一回应。免费运行时仍是运行工作簿应用的入口,扩展作者可注册自有仓库或依赖内置仓库——QueryStorm 保持了这一分发模式,而非交给人家的市场。

资料来源

发现哪里写错了?告诉我们。

轮到你了

你刚读完一个点子。把你手上的题目说出来,看看谁接过同样的题。

免费账号 · 3 次免费提问 · 不用绑卡

相关案例