乐于分享
好东西不私藏

Excel 编程漫谈

Excel 编程漫谈

从任何角度说,电子表格软件(Spreadsheet)都称得上是一项伟大的发明。正是这项发明,让一直处于“玩具”状态的家用电脑进入了商业应用,进而催生了 IBM PC 的诞生,计算机从让人望而生畏的庞然大物走上了个人的办公桌。
本文简单回顾一下电子表格软件的发展史,其中省略了风起云涌、跌宕起伏的竞争史,只从编程的角度略微叙述一下。
1978 年,Dan Bricklin 在哈佛商学院读 MBA。一天,在课堂上看教授在黑板上创建一个财务模型。该财务模型表示为一个纵线和横线构成的表格,可以在格子上填写公式和数据,如果发现错误或需要修改参数,可以擦除某些格子并写上新的数据。Dan Bricklin 意识到他可以在电脑上通过创建一个“电子表格”而复制这一过程。历史上第一个电子表格软件 VisiCalc 由此诞生,Dan Bricklin 也由此被称为“电子表格之父(the father of the Spreadsheet)”。
图1 VisiCal 及其开发者
左图为史上第一个电子表格软件 VisiCalc,右图为 VisiCalc 的开发者:Dan Bricklin(左),Bob Frankston(右)。
VisiCalc 是为 Apple II 计算机开发的,用 6502 汇编语言写成,1979 年 10 月发布,6 年之内销售 70 万套,总共卖出了上百万套。
VisiCalc 确立了电子表格软件单元格的寻址方式:A1。
1983 年,Lotus 推出 Lotus 1-2-3。VisiCalc 逐渐退出历史舞台。
1-2-3 代表这个软件的三个模块:电子表格,商业图形,数据库。由此确立了电子表格软件的基本功能组成。1-2-3 的贡献还不仅于此,1-2-3 在第一版(1983年)就引入了“宏”(Macro)编程能力,在第二版(1987年)引入了“加载项”(Add-in)的概念。“宏”编程能力使得一个软件不再只是由人手工操作的工具,而是可以自动完成某些功能的自动化工具。而“加载项”使得一个软件可以在不修改自身的情况下就能够扩展、增强自身的能力。
图2 Lotus 1-2-3
VisiCalc 石破天惊,从无到有地开创了电子表格这一软件形式。Lotus 1-2-3 不仅确立了电子表格软件的功能组成,而且开创了“宏”和“加载项”这些扩展和增强软件能力的机制。在那样一个“天地玄黄、鸿蒙初开”的年代,这些原创性贡献是非常了不起的。
接下来,微软出场了。1982 年,微软推出了第一个电子表格软件 Multiplan,这是一个不成功的产品。1985 年,微软推出了运行在 Apple Macintosh 电脑上的 Excel 1.0,1987 年,推出了运行在 Windows 上的 Excel 2.05,这是第一个运行在 Windows 的 Excel 版本。到 1990 年代初,Microsoft Excel 逐渐超过 Lotus 1-2-3,这个优势一直保持到现在。
目前,Microsoft Excel 几乎是 Windows 平台和 macOS 平台上最主要的电子表格软件。
Excel 从 1.0 到 4.0 支持一种宏语言,1993 年微软推出 5.0,Excel 开始支持 VBA。Excel 的编程从此进入到了 VBA 时代,从以公式为主的宏语言进入到了面向过程以及面向对象的时代,这个时代一直持续到今天,还会持续一段相当长的时间。
VBA 语言简单,与 Excel 的交互直接,有 COM/OLE Automation 的加持,几乎可以做任何事。但嵌入 VBA 的 Excel 有一个很大的问题:安全隐患!
时间进入二十一世纪,微软在推出 .NET 平台以后,随即推出了基于 .NET 平台开发 Office 的解决方案——VSTO。VSTO 的代码不再嵌入 Excel 文件,加上数字签名,安全性上比 VBA 要高多了。
如果不涉及互联网,VBA 是一个很好的解决方案。如果不涉及其他平台,VSTO 是一个更好的解决方案。但世界越来越走向多元共享,IT 系统也越来越走向多平台共存共荣。.NET 从 .NET Framework 走向 .NET Core 最终走向 .NET 就是一个明证。在这样的情势下,VBA 语言已经老了,而 VSTO 将自己锁死在了 .NET Framework 上。这些都不是未来的解决方案。
面向未来,微软推出了以下几种解决方案:
  • LAMBDA:Excel 的公式本身就是一种语言,加入 LAMBDA 后,这种公式语言就变成“图灵完备的”了,这意味着只使用 Excel 中的公式就可以完成任何事务。
  • Python:微软曾经在一个网络调查中请网友列出 Excel 需要支持的功能,大部分人都选择让 Excel 支持 Python。现在微软推出了 Excel 支持 Python 的解决方案:用户可以在 Excel 中用 Python 编程,但 Python 的执行则是在服务端(云端)。
  • Web Add-ins:JavaScript 虽然一直被人诟病,但仍然充满活力,并且似乎已经成为跨平台的标志,以至于微软都将 Excel 脚本编程的未来压在了 JavaScript 上——用 JavaScript 写的 Excel Add-ins 可以运行在任何运行 Excel 的平台上——Win,Mac,Web,iPad。
除了以上一些编程技术之外,Excel 还支持一种高性能解决方案——XLL。这是一种 DLL 形式的加载项(Add-in)。XLL 的优点在于几乎可以做任何事,性能比所有其他解决方案都要高。可惜的是,XLL 最大的劣势,与 VSTO 一样,也是平台锁定——只能运行在 Windows 平台上。要想移植到 macOS,几乎需要全部重写。
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Excel 编程漫谈

评论 抢沙发

6 + 1 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮