如果我的程序引用了Word的COM,那么如果在一台没有安装对应版本的OFFICE的电脑上运行这个程序会不会报错呢?我们知道richTextBox只支持rtf和纯文本类型的文件。我想到Word是可以将doc文档保存成rtf文档的,但是不知道word是否提供了命令行功能,使我在程序里面可以通过调用命令完成这项工作呢。

解决方案 »

  1.   


    说的应该是word的编程,或者excel
      

  2.   

    添加morcosoft word 12.0 object Library引用
             //获得word文件的文本内容
            public string Doc2Text(string docFileName)
            {
                //实例化COM
                Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
                object fileobj = docFileName;
                object nullobj = System.Reflection.Missing.Value;
                //打开指定文件(不同版本的COM参数个数有差异,一般而言除第一个外都用nullobj就行了)
                Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref fileobj, ref nullobj, ref nullobj, 
                    ref nullobj, ref nullobj, ref nullobj, 
                    ref nullobj, ref nullobj, ref nullobj, 
                    ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj
                    );
                //取得doc文件中的文本
                string outText = doc.Content.Text;
                //关闭文件
                doc.Close(ref nullobj, ref nullobj, ref nullobj);
                //关闭COM
                wordApp.Quit(ref nullobj, ref nullobj, ref nullobj);
                //返回
                return outText;
            }
      

  3.   

    参考C# WinForm开发系列 - Word
    将Word文档导入RichTextBox
      

  4.   

    程序里静态的引用了Word,运行时如果没有安装是会报错的。像这样的程序要求一定要安装相应版本的程序。
    可以考虑使用动态引用,这样可以通过代码来检测是否安装了程序,也可以做到版本兼容。参考下面代码:
    Type objWordType = Type.GetTypeFromProgID("Word.Application");
    object objWordApp = Activator.CreateInstance(objWordType);
    object objDocuments = objWordApp.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, objWordApp, null);
    object[] openParas ={ @"D:\Documents\my\test.doc" };
    object openDocument = objDocuments.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objDocuments, openParas);
    object[] pars = { true };
    objWordApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objWordApp, pars);
      

  5.   

    Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass(); 
                object fileobj = docFileName; 
                object nullobj = System.Reflection.Missing.Value; 
                //打开指定文件(不同版本的COM参数个数有差异,一般而言除第一个外都用nullobj就行了) 
                Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref fileobj, ref nullobj, ref nullobj, 
                    ref nullobj, ref nullobj, ref nullobj, 
                    ref nullobj, ref nullobj, ref nullobj, 
                    ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj 
                    ); 
             object fileFormate = Word.WdSaveFormat.wdFormatRTF; 
             curDoc.SaveAs(ref rtfSaveName, ref fileFormate, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing, ref encoding, ref missing,
                        ref missing, ref missing, ref missing);

               //关闭文件 
                doc.Close(ref nullobj, ref nullobj, ref nullobj); 
                //关闭COM 
                wordApp.Quit(ref nullobj, ref nullobj, ref nullobj);