从Excel中调用RTD服务器时出现exception
我使用Visual Studio 2010编写了一个VSTO Excel插件,在设法解决了微软投入正义开发者的大部分障碍后,我终于不得不承认失败。
我的项目包含一个带有一些控件的function区,一个自定义的任务窗格,允许用户通过一个REST风格的界面和一个RTD服务器来search数据库,这个服务器可以让他们把这些数据放在工作表中。 到目前为止,好吧,痛苦的,我猜:经过与Interop,ComVisibility和AppDomains的很多争斗(这是一个好主意!),我目前的状态如下。
在工作表中,我像这样调用RTD的封装函数(剪切):
Public Function call(value as String) Dim addin as Office.ComAddIn Set addin = Application.ComAddIns("MyAddin") addin.Object.RTD(value) End Function
这是插件类的(部分):
namespace Some { [Guid("...")] [ComVisibleAttribute(true)] [ClassInterface(ClassInterfaceType.AutoDual)] public class MyAddin { [snip] public String RTD(String value) { String returner = null; try { returner = Globals.ThisAddin.Application.WorksheetFunction.RTD(SERVERID, "", value); } catch(COMException ce) { returner = ce.StackTrace; } return returner; } } }
和RTD服务器类的相关部分:
namespace Some { [Guid("...")] [ComVisibleAttribute(true)] [ClassInterface(ClassInterfaceType.AutoDual)] [ProgId("MyRTDServer")] public class Server : Excel.IRtdServer { [snip] } }
在debugging模式I中:
- 创build一个空的新工作簿
- 将“= RTD(…)”公式添加到单元格中
- 将包装函数调用“= call(…)”添加到单元格
- 保存工作簿
- 打开工作簿
- 停止debugging并再次启动
- 打开工作簿
我观察到:
- 3时,一切正常
- 在5,一切正常
- 在7,重新计算我的单元格时,出现
Unable to get the RTD property of the WorksheetFunction class
3)单元格中Unable to get the RTD property of the WorksheetFunction class
exceptionUnable to get the RTD property of the WorksheetFunction class
以及2)单元格中的#N/A
但是,我可以看到主题已在RTD服务器中注册,只要数据可用,exception就会被正确的数据replace。 此外,如果我不重新计算单元格,它们将显示保存的值,然后在数据可用时正确更新为检索的值。
如果在部署模式下,我观察到:
- 在2,我得到
#N/A
- 在3,我得到一个
Unable to get the RTD property of the WorksheetFunction class
exceptionUnable to get the RTD property of the WorksheetFunction class
请帮忙吗? 🙁
编辑:
在一个空白的Addin项目中用一个非常基本的RTD服务器testing相同的过程显示了完全相同的结果:如果在服务器有可用数据之前重新计算RTD公式,则加载的excel文件显示#N/A
我想问一下:跆拳道?
干杯,车
“无法获取RTD属性….”错误只是Excel对象模型的方式,表示函数调用中有错误。
您的RTD服务器是否与您的加载项的其余部分有任何依赖关系? 事实上,2)部署失败,使得它看起来像RTD服务器需要一些其他的位被初始化之前,它运行愉快。 将VSTO加载项放在一起的方式,您的程序集很可能会完全分别加载到RTD服务器和COM加载项中,而在出现问题的情况下,将首先加载RTD实例。
也许你可以使用示例RTD服务器而不是自己的testing,只是为了确认错误是在那里,而不是在包装器或VSTO加载项中的其他地方。 然后你可以挖掘你的RTD服务器,看看出了什么问题。
-Govert
Excel-DNA – 免费,简单的.NET for Excel