通过反射操作word excel中遇到的问题unknown name

1:如何勾挂事件

2:某些对象获取不到

 

在用反射操作word excel的时候某些对象的时候被抛异常 未知的名称 unkonwn name最后试出来一个解决的方法

 

  1.       object wordapp;
  2.             Type wordType = Type.GetTypeFromProgID("Word.Application");
  3.             wordapp = Activator.CreateInstance(wordType);
  4.             EventInfo ei =  wordapp.GetType().GetEvent("DocumentOpen");
  5.             Type deei = ei.EventHandlerType;
  6.             object all = wordapp.GetType().InvokeMember("AddIns", BindingFlags.GetProperty, System.Type.DefaultBinder, wordapp, null);
  7.             MethodInfo mi =  all.GetType().GetMethod("Unload",BindingFlags.IgnoreCase| BindingFlags.InvokeMethod| BindingFlags.Public| BindingFlags.NonPublic | BindingFlags.Static);
  8.             
  9.             
  10.             //funMergeRtf(x, y, wordapp);
  11.             wordapp.GetType().InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, wordapp, null);

 

上面的代码中,第一个问题是获取到事件对象以后,在绑定到事件处理方法的时候异常

第二个问题是AddIns对象的Unload方法获取不到

 

对于第一个问题,在用委托绑定事件的时候需要传递一个参数好像是事件的触发者,但是如上的documentopen事件的触发

是一个word.document对象,但是我使用word.document实例化出来的实例都自动变成了word.documentclass,郁闷

第二个问题addins对象在vs文本编辑器中,智能感应能获取到unload方法(要引用word),但是反射却不能获取到这个方法

而且还有很多方法都是这样的情况,比如office excel 中的get_range方法 = =#

 

对于以上问题目前仅想到尝试使用vb.net搞搞然后c#调用vb.net的东西看看,我无力了,查了好多英文网站都没有找出好的解决方法

继续中.....

 

尝试多次终于解决一个

 

 

  1.             object all = wordapp.GetType().InvokeMember("AddIns", BindingFlags.GetProperty, System.Type.DefaultBinder, wordapp, null);
  2.             object docs = wordapp.GetType().InvokeMember("Documents", BindingFlags.GetProperty, System.Type.DefaultBinder, wordapp, null);
  3.             
  4.             docs.GetType().InvokeMember("Unload", BindingFlags.InvokeMethod, System.Type.DefaultBinder, all, new object[] { false });

很是诡异:使用docs.GetType().InvokeMember 而不是all .GetType().InvokeMember才能将这个方法执行成功!没有明白为什么....但是问题目前是解决了,期待跟深入的了解

 

在时隔2天以后测试上面这段代码居然再次报异常= =#,无语了,旁边的机器一模一样的代码顺利通过....再次无语......

苍天啊,你杀了我吧!

冷静1个小时以后发现....InvokeMember("Unload "后面多了个空格.....= = orz不活了

posted @ 2008-08-26 10:26  Sean.Z  阅读(700)  评论(0)    收藏  举报