通过反射操作word excel中遇到的问题unknown name
1:如何勾挂事件
2:某些对象获取不到
在用反射操作word excel的时候某些对象的时候被抛异常 未知的名称 unkonwn name最后试出来一个解决的方法
- object wordapp;
 - Type wordType = Type.GetTypeFromProgID("Word.Application");
 - wordapp = Activator.CreateInstance(wordType);
 - EventInfo ei = wordapp.GetType().GetEvent("DocumentOpen");
 - Type deei = ei.EventHandlerType;
 - object all = wordapp.GetType().InvokeMember("AddIns", BindingFlags.GetProperty, System.Type.DefaultBinder, wordapp, null);
 - MethodInfo mi = all.GetType().GetMethod("Unload",BindingFlags.IgnoreCase| BindingFlags.InvokeMethod| BindingFlags.Public| BindingFlags.NonPublic | BindingFlags.Static);
 - //funMergeRtf(x, y, wordapp);
 - 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的东西看看,我无力了,查了好多英文网站都没有找出好的解决方法
继续中.....
尝试多次终于解决一个
- object all = wordapp.GetType().InvokeMember("AddIns", BindingFlags.GetProperty, System.Type.DefaultBinder, wordapp, null);
 - object docs = wordapp.GetType().InvokeMember("Documents", BindingFlags.GetProperty, System.Type.DefaultBinder, wordapp, null);
 - docs.GetType().InvokeMember("Unload", BindingFlags.InvokeMethod, System.Type.DefaultBinder, all, new object[] { false });
 
很是诡异:使用docs.GetType().InvokeMember 而不是all .GetType().InvokeMember才能将这个方法执行成功!没有明白为什么....但是问题目前是解决了,期待跟深入的了解
在时隔2天以后测试上面这段代码居然再次报异常= =#,无语了,旁边的机器一模一样的代码顺利通过....再次无语......
苍天啊,你杀了我吧!
冷静1个小时以后发现....InvokeMember("Unload "后面多了个空格.....= = orz不活了
                    
                
                
            
        
浙公网安备 33010602011771号