Excel自动化插件 - 功能不工作
编辑:真正的解决方案,我想做什么可以在这篇文章here找到。我只是想公开一些编译好的函数。使用Excel DNA nuget包证明这非常简单。您只需添加一个类库,添加nuget包,然后复制自述文件中找到的代码。点击F5,它会在加载项已经加载的情况下启动excel。如果你想让你的函数持久化,只需要通过“开发人员”功能区部分手动将加载项添加到excel文件。Excel自动化插件 - 功能不工作
原始发布: 我按照this microsoft post的说明,如何创建一个自动加载项。代码编译得很好,我可以从Excel中访问函数。但是这些功能不起作用。当我尝试为单元格分配函数调用的结果时,我几乎总是得到#value或#ref错误。更具体地说:
以下由Microsoft提供的功能不起作用。它在我尝试使用它的单元格中显示#value错误。我选择使用鼠标随机单元格范围作为函数的参数。
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中得到相同的#值错误。我从一开始就没有遵循这篇文章的教程,但我会在白天进行。
编辑2:我发现,只要在函数名称中添加一个数字,由于某些原因,Microsoft的代码无法工作。如果我将上面的示例代码中的Add1重命名为Addqweqew,它将起作用!
MSDN参考:http://blogs.msdn.com/b/andreww/archive/2008/01/23/managed-automation-add-ins.aspx
它有一个区域设置ID(LCID)的问题做。当在混合文化环境中开发Excel解决方案时,这是一个已知问题 。有关更多 信息,请参阅此处:http://support.microsoft.com/kb/246501/。
VSTO通过其LCID代理解决了这个问题。虽然你只能使用 这与VSTO解决方案,它值得一读的文件,所以你可以 理解这个问题: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033proxy.aspx 和 http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033attribute.aspx。
我得到了同样的问题#VALUE结果,我逛了一下打乱,得到了这个工作(显然它可以被清除了 - 但是这个代码肯定对我的作品,同时保持我的电脑设置为我的澳大利亚语言环境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
当你说“不工作“你为每个案件专门做了什么错误?你用什么数据来测试这些功能? – chancea 2015-02-06 22:55:24
相应编辑帖子! – gerodim 2015-02-06 23:03:00