【发布时间】:2013-05-30 00:11:42
【问题描述】:
这个问题一直是askedbefore,但是每次接受的答案都是简单的辞职使用Application.MacroOptions(VBA6)(VBA7)提供功能描述,但是这个信息实际上并没有出现作为工具提示,所以它不能解决我的问题。
目标
我们都希望能够通过任何方式(VBA、VSTO 或 COM 插件)定义自定义函数,并为用户提供函数及其功能的弹出/工具提示描述的好处参数,显示在每个内置 Excel 函数中,无论是内联还是在公式栏中:
对此需求的广泛接受的答案是自定义函数是不可能的,但我想挑战这种信念。
问题
目前,我见过的最好的方法是定义函数(通常使用上面的 MacroOptions 调用),以便在打开函数对话框(公式栏中的 fx 按钮)时,它们的函数和参数描述如下所示:
如您所见,这是一个带有许多参数的复杂函数。如果用户不知道这个“函数参数”对话框以及如何打开它,而只熟悉 Excel 的标准工具提示,他们将只会看到公式名称而没有其他帮助:
他们没有机会正确提供所需的参数。 (不阅读文档,当然,没有用户会这样做。)
现在,高级用户可能知道,通过键入 Ctrl+Shift+A,他们将获得一个自动完成的列表函数参数如下:
当然,我们也有与上述相同的问题,即标准 excel 用户只会习惯于第一张图片的默认行为,并且可能永远不会学习该功能。
现在应该很清楚为什么这还不够,我们想要每个内置函数都有什么 - 告诉用户如何使用该函数的内嵌工具提示。
戏弄
起初,我可能认为这根本不可能,除非使用本机 Excel 应用程序功能。加载项和 VBA 是可扩展性功能,并且此工具提示可能根本不可扩展。但该理论受到分析工具库插件的挑战。当然,它是在 Microsoft 中构建的,但 ANALYS32.xll 是一个独立的 XLL 插件,就像可以在 VB、C、C++ 和 C# 中生成的插件一样。果然,当这个 XLL 被加载到应用程序中时,它提供的 functions 具有与本机 excel 函数相同的工具提示:
当然,如果此信息以某种方式在此 XLL 文件中编码并传递到 Excel,是否可以使用我们自己的加载项复制它?我现在要开始自学一些关于反编译的知识,看看我是否可以对分析工具包中发生的任何事情进行逆向工程。
如何提供帮助
我几乎可以肯定,我已经研究了有关此问题的所有公开信息。如果有人知道一些我不知道的东西可能对此有所帮助,请随时插话。我对逆向工程编译的 dll / xlls 非常不熟悉,所以如果有人想打开他们的 Analysis32.xll 本地副本和弄清楚它的自定义函数定义发生了什么,我将非常感激。否则,我将自己继续深入研究,直到找到所有死胡同并报告我的发现。
【问题讨论】:
-
无法使用任何可用技术在当前 Excel 版本中创建或显示 UDF 参数的工具提示。 MVP 来源:answers.microsoft.com/en-us/office/forum/office_2007-customize/…
-
.NET Reflector 无法打开 ANALYS32.xll,断定它不是 .NET 程序集。这让我很惊讶。看起来我将不得不尝试将其反编译为汇编语言?
-
听起来很有趣,但我过去 (office 97) 使用 winapi 制作了工具提示。这样你就可以做到。如果这很有趣,我可以挖掘信息并尝试从中得出答案。
-
我也会得到它,这需要一些时间来挖掘它。但它应该放在这里供其他人使用。它是 winapi/vba/ 的低级和邪恶组合,我想我把它做成 vb.dll 但它不可能将它提升到 .net
-
显然 Excel 开发团队正在为这个功能投票:excel.uservoice.com/forums/…
标签: c# excel .net-4.0 office-interop decompiling