Excel 自动化插件 - 功能不工作

Excel Automation Addin - functions not working

编辑:可以在此 post here 上找到我想要做的事情的真正解决方案。我只是想将一些已编译的函数公开给 excel。事实证明,使用 Excel DNA nuget 包非常容易。您只需添加一个 class 库,添加 nuget 包,然后复制粘贴自述文件中的代码。单击 F5 并启动 excel,加载项已加载。如果您希望保留您的功能,您只需通过 "developer" 功能区部分手动将加载项添加到 excel 文件。

原文Post: 我正在按照 this 微软 post 关于如何创建自动化插件的说明进行操作。代码编译得很好,我可以从 Excel 中访问函数。但是这些功能不起作用。当我尝试将函数调用的结果分配给单元格时,我几乎总是会收到 #value 或 #ref 错误。更具体地说:

Microsoft 提供的以下功能不起作用。它在我尝试使用它的单元格中向我显示#value 错误。我 select 使用鼠标随机单元格范围作为函数的参数。

    Public Function NumberOfCells(ByVal range As Object) As Double
    Dim r As Excel.Range = TryCast(range, Excel.Range)
    Return CDbl(r.get_Cells.get_Count)
End Function

我创建的以下函数不起作用。我收到#ref 错误。我通过直接传递整数 ( Add1(1,2) ) 或包含数字的单元格来调用它。

    Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer
    return i1+i2
End Function

我创建的以下函数有效(?!?):

    Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer
    return 222
End Function

我在 c# 方面非常有经验,但在 vb.net 方面一点也没有,但是对于这个插件我需要使用 vb.net。我怀疑我在这里缺少一些简单的东西,但我不知道它是什么。微软提供的代码也不行也很奇怪

编辑:我还复制粘贴了函数 here,但在 excel 中出现了相同的 #Value 错误。我没有从一开始就按照 post 中的教程进行操作,但我会在白天进行操作。

编辑 2:我发现当您在函数名称中添加数字时,Microsoft 的代码出于某种原因不起作用。如果我将上面示例代码中的 Add1 重命名为 Addqweqew,它就可以工作了!

MSDN 参考:http://blogs.msdn.com/b/andreww/archive/2008/01/23/managed-automation-add-ins.aspx

It has to do with a locale ID (LCID) issue. This is a known issue when developing Excel solutions in a mixed culture environment. For more information, see here: http://support.microsoft.com/kb/246501/.

VSTO solves this problem via its LCID Proxy. Although you can only use this with VSTO solutions, its worth reading the documentation so you can understand the problem: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033proxy.aspx and http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033attribute.aspx.

我遇到了同样的问题 #Value 结果,我搞砸了一点并让这个工作正常(显然它可以被清除 - 但这段代码对我来说绝对有效,同时保持我的 PC 设置为我的澳大利亚语言环境 ID。我不确定你住在世界的哪个地方,但我猜不是美国,因为这是它默认工作的语言环境)

Public Function AddNumbers1(ByVal num1 As Double, _
                            ByVal num2 As Double) As Double

    Dim oldCI As CultureInfo = Thread.CurrentThread.CurrentCulture
    Dim english As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("en-US")
    System.Threading.Thread.CurrentThread.CurrentCulture = english
    System.Threading.Thread.CurrentThread.CurrentUICulture = english

    Dim valresult As Double = num1 + num2

    Thread.CurrentThread.CurrentCulture = oldCI
    Return valresult
End Function

相关问题:https://social.msdn.microsoft.com/Forums/en-US/dafe71c5-d390-44bc-b4d3-b133444a02fe/excel-automation-addin-udf-returns-error-on-different-regional-settings?forum=vsto