Excel 中遇到较复杂的运算,数据分析师常会用 add-ins 辅助解决。本文考察了一些常见的 add-ins,从部署难度、开发难度、流畅程度等方面进行深度对比,并着重考察了数据计算能力,esProc 在这些 add-ins 中的表现相对出色。点击辅助 Excel 的数据计算 add-ins了解详情。
对于大多数简单运算,Excel都提供了方便的实现手段,有时是易用的函数,有时是直观的按钮或菜单。但我们还是会遇到的一些较复杂或特殊的运算,依靠Excel本身很难实现。Excel提供了add-in接口,可以通过这个接口执行外部程序,从而借助外部语言或脚本实现这些较复杂或特殊的运算,达到辅助Excel的目的。
下面,让我们深入了解一些Excel的常见数据计算add-ins,并评估它们的计算能力。
Excel DNA
Excel DNA是早期出现的一款Excel add-in,它可以把程序员写好的动态库函数放到Excel里使用,动态库可以使用C#/F#/VB.net等语言等编写。
具体用法上,Excel DNA和其他所有add-ins都类似,首先要编写自定义函数。比如下面C#编写的代码中(引自Excel DNA官网),MyFunction是自定义函数名。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ExcelDna.Integration;
namespace MyLibrary { public class Class1 { [ExcelFunction(Description="few people use this way!")] public static string MyFunction(string name) { return "Bonjour" + name; } } } |
上面的代码须编译成动态库,之后才能在Excel中使用。
接下来,一般要配置自定义函数和add-in的关系。比如下面的DnaSample.dna文件,表明本add-in的名字是"My name",对应的动态库是Mylibrary.dll(含有多个自定义函数)。
<DnaLibrary Name="My name" RuntimeVersion="v4.0"> <ExternalLibrary Path="Mylibrary.dll" /> </DnaLibary> |
最后在Excel中配置该add-in,就可以在单元格中调用MyFunction这个函数了,如下:
A | A | ||||
1 | =MyFunction("jason") | press enter | --> | 1 | Bonjour jason |
2 | 2 |
应该注意到,上述过程有个编译的动作,因为编译过的程序可直接执行,且与Excel集成紧密,因此执行效率非常高。这便带来了Excel DNA最大的优点:顺滑无卡顿。
Excel DNA的其他优点从名字就可以看出来,换句话说,该add-in可以充分利用微软DNA架构提供的便利,比如开发语言、开发工具、Excel集成、联动调试等。
还应该注意到,C#/F#/VB.net等语言的通用性很强,理论上是无所不能的,但官网的代码例子却只是字符串输出,体现不出哪怕丝毫的能力,这到底是为什么呢?
因为理论和实际是有差别的。
C#/F#/VB.net等语言缺乏结构化计算类库,即使最基本的运算都要硬编码实现,代码因此非常繁琐,并不适合做复杂的数据计算。
除了不适合数据计算,还应注意到C#/F#/VB.net是编译型语言,而不是解释型语言,这就要求用户必须维护一套编译环境,以备修改算法后编译所用,而微软的编译环境配置较复杂,桌面数据分析师不易掌握。事实上,C#/F#/VB.net等语言本身的技术门槛就很高,这就导致Excel DNA更适合专业程序员作为接口使用,并不适合大多数桌面数据分析师直接使用。
除了Excel DNA,还有其他一些add-ins同样缺乏结构化计算类库,比如基于JAVA语言的JINX。很容易就能判断出,JINX也不适合数据计算。事实上,Excel 自带的VBA在语言能力上和Excel DNA/JINX相当(都不适合数据计算),但VBA免集成免编译,比Excel DNA/