不引用word,excel的dll使用反射来在项目中进行vba操作

这个是项目中用到一个测试demo,写完以后运行了下,感觉还可以,丢上来了,因为office2003 2007的问题头疼半天,用反射搞定的
= =#,不过这玩意用起来忒麻烦呀忒麻烦,都是微软变态,office兼容性一点都不好
 
  1.  private void button2_Click(object sender, EventArgs e)
  2.         {
  3.             //System.Data.DataRowView dr = (System.Data.DataRowView)this.comboBox1.SelectedItem;
  4.             //this.button2.Text = dr.Row.ItemArray[0].ToString();
  5.             return;
  6.             string x = @"d:/1.rtf";
  7.             string y = @"d:/2.rtf";
  8.             //开启一个word appliction对象
  9.             object wordapp;
  10.             Type wordType = Type.GetTypeFromProgID("Word.Application");
  11.             wordapp = Activator.CreateInstance(wordType);
  12.             funMergeRtf(x, y, wordapp);
  13.             wordapp.GetType().InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, wordapp, null);
  14.         }
  15.         /// <summary>
  16.         /// 将第二个参数中的文件内容放入第一个参数里面
  17.         /// </summary>
  18.         /// <param name="strSource">存放的文件路径</param>
  19.         /// <param name="strTag">取内容的对象路径</param>
  20.         /// <param name="wordapp">已经打开的wordapplication对象</param>
  21.         private void funMergeRtf(string strSource, string strTag, object wordapp)
  22.         {
  23.             //由于项目中不引用word对象,同时为了使2003与2007的文档都能读取,而不因客户机的office版本影响程序操作word
  24.             //使用发射进行调用
  25.             //定义将要使用到的对象            
  26.             object docSource;//源文档对象
  27.             object docTag;//目标文档对象
  28.             object documents;//appliction的文档集合
  29.             object range;//文本的范围对象
  30.             object paragraph;//文档的段落对象集合
  31.             object newparagraph;
  32.             //object savechanges//保存对象的枚举参数
  33.             object result;//结果
  34.             Type typeWord = wordapp.GetType();//设定对象类型
  35.             try
  36.             {
  37.                 documents = typeWord.InvokeMember("Documents", System.Reflection.BindingFlags.GetProperty, System.Type.DefaultBinder, wordapp, null);//获取文档集合对象
  38.                 docSource = documents.GetType().InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, documents, new object[] { strSource });//打开指定源文件并且获取对象
  39.                 //docSource = typeDocuments.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, documents, new object[] { strSource });//打开指定源文件并且获取对象
  40.                 docTag = documents.GetType().InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, documents, new object[] { strTag });//打开指定源文件并且获取对象
  41.                 range = docTag.GetType().InvokeMember("Content", System.Reflection.BindingFlags.GetProperty, System.Type.DefaultBinder, docTag, null);//获取目标rtf中的所有内容存放入range对象
  42.                 paragraph = docSource.GetType().InvokeMember("Paragraphs", System.Reflection.BindingFlags.GetProperty, System.Type.DefaultBinder, docSource, null);//获取源rtf中的所有段落集合对象等待插入新段落
  43.                 newparagraph = paragraph.GetType().InvokeMember("Add", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, paragraph, null);//新建一个段落
  44.                 paragraph.GetType().InvokeMember("Range", System.Reflection.BindingFlags.SetProperty, System.Type.DefaultBinder, newparagraph, new object[] { range });//将目标rtf中的内容放入源文档                                         
  45.                 docTag.GetType().InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, docTag, null);//关闭目标文档
  46.                 docSource.GetType().InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, docSource, new object[] { strSource });//在保存以后关闭源文档
  47.                 docSource.GetType().InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, docSource, null);//关闭目标文档
  48.             }
  49.             catch
  50.             {
  51.             }     
  52.         }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值