寻求Excel自定义函数工具提示

Ala*_*ain 99 c# excel decompiling .net-4.0 office-interop

之前已经 这个问题,但每次接受的答案只是使用Application.MacroOptions(VBA6)(VBA7)提供功能描述的辞职,但这些信息实际上并不是工具提示,所以它不能解决我的问题.

目标

我们都希望能够通过任何方式(VBA,VSTO或COM加载项)定义自定义函数,并为用户提供函数及其参数的弹出/工具提示描述的好处,如对于每个内置Excel函数,无论是内联还是在公式栏中都会出现:

在此输入图像描述

在此输入图像描述

对这种需求的广泛接受的答案是,定制功能是不可能的,但我希望挑战这种信念.

问题

目前,我见过的最好的人是定义函数(通常使用上面的MacroOptions调用),这样当调出函数对话框(公式栏中的fx按钮)时,它们的函数和参数说明如下所示:

在此输入图像描述

如您所见,这是一个包含许多参数的复杂函数.如果用户不知道这个"函数参数"对话框以及如何启动它,而只是熟悉Excel的标准工具提示,他们只会看到公式名称而没有其他帮助:

在此输入图像描述

他们没有机会正确提供所需的参数.(没有阅读文档,当然,没有用户做过.)

现在,高级用户可能知道通过键入Ctrl+ Shift+ A,他们将被授予一个自动完成的函数参数列表,如下所示:

在此输入图像描述

但是,当然,我们遇到与上述相同的问题,即标准的Excel用户将只用于第一张图像的默认行为,并且可能永远不会学习该功能.

在这一点上应该清楚为什么这还不够,我们想要每个内置函数都有 - 内联工具提示告诉用户如何使用该函数.

挑逗

起初,我可能已经确信除了本机Excel应用程序功能之外,这是不可能的.加载项和VBA是可扩展性功能,此工具提示可能根本不可扩展.但是这个理论受到了Analysis Toolpak插件存在的挑战.当然,它是在微软内置的,但ANALYS32.xll是一个独立的XLL加载项,就像那些可以用VB,C,C++和C#生成的加载项一样.果然,当这个XLL加载到应用程序中时,它提供的功能具有与原生excel函数相同的工具提示:

在此输入图像描述

当然,如果此信息以某种方式编码在此XLL文件中并传递给Excel,有一种方法可以使用我们自己的加载项复制它吗?我现在正处于这样的地步,我将开始自我教授一些反编译,看看我是否可以对分析工具库中发生的任何事情进行逆向工程.

你可以如何帮助

我几乎可以肯定,我已经研究了有关这个问题的所有公开信息.如果有人知道我不知道的东西可能会对此有所帮助,请随意插入.我对逆向工程编译的dll/xll非常不熟悉,所以如果有人感觉像是弹出他们的本地副本的Analysis32.xll和弄清楚它的定制功能定义是怎么回事,我非常感激.否则,我会继续深入研究这个问题,直到我遇到所有死胡同并报告我找到的东西.

Gov*_*ert 39

我已经向GitHub发布了一个概念验证项目作为Excel-DNA IntelliSense项目,实现了这个目标.

使用UI Automation类监视相应的Excel用户界面事件,在适当时显示一个表单.

代码包装为Excel-DNA加载项,可在我的Excel 2013/Windows 8计算机上运行.我已经在另一个配置(Windows Server 2008上的64位Excel 2010)上进行了测试,并遇到了严重的问题.

对于使用Excel-DNA属性定义的C#函数,如下所示:

[ExcelFunction(Description = 
    "A useful test function that adds two numbers, and returns the sum.")]
public static double AddThem(
    [ExcelArgument(Name = "Augend", 
                   Description = "is the first number, to which will be added")] 
    double v1,
    [ExcelArgument(Name = "Addend", 
                   Description = "is the second number that will be added")]     
    double v2)
{
    return v1 + v2;
}
Run Code Online (Sandbox Code Playgroud)

我们得到了功能描述

功能说明

在选择函数时,我们得到参数帮助

争论帮助

这看起来不错,但它仍然非常脆弱,只能在我的机器上运行,有时会崩溃Excel.这可能是一个开始,但......


2014年5月9日更新:

我已经取得了一些进展,弄清楚如何使参数帮助在较旧的Excel和Windows版本下工作.然而,要使一切可靠,仍然需要做很多工作.任何想要帮助的人都应该直接与我联系.


2016年6月18日更新:

目前正在测试Excel-DNA加载项和VBA功能的Excel UDF IntelliSense支持.有关说明,请参阅GitHub上的" 入门"页面.