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
编辑:可以在此 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