VS2003中基于Word2003编程

转载 2006年06月21日 15:54:00

曾经编译过一篇Visual Studio .NET自动化MS Word,那是基于Word2000的,其实由于我跟这方面打交道不是太多,所以也就没有继续研究过了,昨天一位园友针对那文章提了个问题“我现在需要的是把一个文档的内容拷到另外一个文档内容之后,先把第一个文档调动内容复制到剪贴板上了,但下面应该怎么把粘贴位置定位到另一个文档之后呢?”。没有办法,我只能重新拿出那些代码,但我现在的是word2003了,所以编译代码是需要修改的了,所以针对Word2003的一些东西,在写点东西,希望对正想做这类事情又无从下手的朋友一点帮助。

必要的程序集

       COM选项卡下选择:

注意:这是Office2003的,如果是其它版本则就不同了。

几种简单操作

       先创建一个MS Word COM对象,该对象是我们用来访问Word提供的各种函数,如果你想明白哪些函数是可以用的,你最好去Word中查找,打开Word,按[Alt+F11],然后再按F1,你就可以打开帮助了。

Word.ApplicationClass vk_word_app = new Word.ApplicationClass();

vk_word_app.Visible = true;

vk_word_app.Activate();

上面的vk_word_app就是一个Word COM对象,并激活了它,且显示出来,如果设为false,则word在后台运行,看不到它的界面。

打开一个word文档

         object  fileName = openFileDialog.FileName;

               

            object  vk_ConfirmConversions       = true;

            object  vk_ReadOnly             = false;

            object  vk_AddToRecentFiles     = true;

            object  vk_PasswordDocument     = "";

            object  vk_PasswordTemplate     = "";

            object  vk_Revert               = false;               

object  vk_WritePasswordDocument= "";

                object  vk_WritePasswordTemplate= "";

                object  vk_Format               = Word.WdOpenFormat.wdOpenFormatAuto;

                object  vk_Encoding             = System.Reflection.Missing.Value;

                object  vk_Visible              = true;

                object  vk_OpenConflictDocument = false;

                object  vk_OpenAndRepair        = true;

                object  vk_DocumentDirection    = Word.WdDocumentDirection.wdLeftToRight;

                object  vk_NoEncodingDialog     = true;

                object  vk_XMLTransform         = System.Reflection.Missing.Value;

 

                object  vk_false        = false;

                object  vk_true         = true;

                object  vk_dynamic      = 2;

 

               

               

 

                object  vk_missing      = System.Reflection.Missing.Value;

 

                StartWord();

               

 

                // 打开文档

                vk_my_doc = vk_word_app.Documents.Open(ref fileName,

                    ref vk_ConfirmConversions, ref vk_ReadOnly, ref vk_AddToRecentFiles, ref vk_PasswordDocument,

                    ref vk_PasswordTemplate, ref vk_Revert, ref vk_WritePasswordDocument, ref vk_WritePasswordTemplate,

                    ref vk_Format, ref vk_Encoding, ref vk_Visible,ref vk_OpenConflictDocument,ref vk_OpenAndRepair, ref vk_DocumentDirection, ref vk_XMLTransform);

其实这中有许多参数都是用处不大,但为了大家看得更加明白,我还是一个一个写得比较清楚,比较容易明白参数是什么意思(这些参数什么意思,请按上面提到的方法去Word中找)。

建立一个新的文档

       下面的代码告诉我们如果建立一个新的word文档,而且向文档中加入一些内容:

Word.Document vk_new_doc = vk_word_app.Documents.Add( ref vk_missing,

                ref vk_missing, ref vk_missing, ref vk_Visible );

 

            doc.Select();

            vk_word_app.Selection.Copy();

            // Paste into new document as unformatted text

            vk_new_doc.Select();

            vk_word_app.Selection.PasteSpecial( ref vk_missing, ref vk_false,

                ref vk_missing, ref vk_false, ref vk_DataType, ref vk_missing, ref vk_missing );

保存文档

       刚才新建一个文档,现在要保存它,并且关闭它:

object  vk_LockComments         = false;

            object  vk_FileFormat           = Word.WdSaveFormat.wdFormatDocument;

            object  vk_Password             = "";

            object  vk_AddToRecentFiles     = true;

            object  vk_WritePassword        = "";

            object  vk_ReadOnlyRecommended  = false;

            object  vk_EmbedTrueTypeFonts   = true;

            object  vk_SaveNativePictureFormat = true;

            object  vk_SaveFormsData        = false;

            object  vk_SaveAsAOCELetter     = true;

            object  vk_Encoding             = System.Reflection.Missing.Value;

            object  vk_nsertLineBreaks      = false;

            object  vk_AllowSubstitutions   = false;

            object  vk_LineEnding           = Word.WdLineEndingType.wdCRLF;

            object  vk_AddBiDiMarks         = false;

 

            vk_new_doc.Content.InsertAfter("这个是我新建的文档!!!");

 

            // 保存文档

            vk_new_doc.SaveAs(ref vk_FileName, ref vk_FileFormat,ref vk_LockComments, ref vk_Password,ref vk_AddToRecentFiles, ref vk_WritePassword,

                ref vk_ReadOnlyRecommended, ref vk_EmbedTrueTypeFonts, ref vk_SaveNativePictureFormat, ref vk_SaveFormsData, ref vk_SaveAsAOCELetter, ref vk_Encoding,

                ref vk_nsertLineBreaks,ref vk_AllowSubstitutions,ref vk_LineEnding,ref vk_AddBiDiMarks);

            // 关闭新文档

            object  vk_SaveChanges          = Word.WdSaveOptions.wdSaveChanges;

            object  vk_OriginalFormat       = Word.WdOriginalFormat.wdWordDocument;

            object  vk_RouteDocument        = false;

            doc.Close( ref vk_SaveChanges, ref vk_OriginalFormat, ref vk_RouteDocument );

            vk_new_doc.Close( ref vk_SaveChanges, ref vk_OriginalFormat, ref vk_RouteDocument );

 

查找替换

       查找和替换是常用的功能,我的代码中就是使用如下方法:

private void FindAndReplace( object FindText, object ReplaceWith, object Wrap )

        {

           

            object  vk_FindText             = FindText;

            object  vk_MatchCase            = false;

            object  vk_MatchWholeWord       = false;

            object  vk_MatchWildcards       = false;

            object  vk_MatchSoundsLike      = false;

            object  vk_MatchAllWordForms    = false;

            object  vk_Forward              = true;

            object  vk_Wrap                 = Wrap;

            object  vk_Format               = false;

            object  vk_ReplaceWith          = ReplaceWith;

            object  vk_Replace              = Word.WdReplace.wdReplaceAll;

            object  vk_MatchKashida         = false;

            object  vk_MatchDiacritics      = false;

            object  vk_MatchAlefHamza       = false;

            object  vk_MatchControl         = false;

 

 

            vk_word_app.Selection.Find.Execute( ref vk_FindText, ref vk_MatchCase, ref vk_MatchWholeWord,

                ref vk_MatchWildcards, ref vk_MatchSoundsLike, ref vk_MatchAllWordForms, ref vk_Forward, ref vk_Wrap, ref vk_Format,

                ref vk_ReplaceWith, ref vk_Replace, ref vk_MatchKashida, ref vk_MatchDiacritics, ref vk_MatchAlefHamza, ref vk_MatchControl );

         }

 

把剪贴板中的内容自动加载到正打开的文档

这就是那个园友问的,顺便也在这贴出:

string content = string.Empty;

            try

            {

                IDataObject idata = Clipboard.GetDataObject();

                if(idata.GetDataPresent(DataFormats.Text))

                {

                    content             = (string)idata.GetData(DataFormats.Text);

                    this.textBox1.Text  = content;

                }

                else

                {

                    this.textBox1.Text = "现在剪贴板上没有任何东西!";

                }

            }

            catch(Exception ex)

            {

                this.textBox1.Text = ex.Message;

            }

               

            object  vk_Direction    = Word.WdCollapseDirection.wdCollapseStart;

            doc.Content.InsertParagraphAfter();

            Word.Range range = doc.Paragraphs[doc.Paragraphs.Count].Range;

            range.Collapse(ref vk_Direction);

            range.Paste();

这样的结果就是在文档的最后,重新开始一段并把内容加进去。

给文档设置密码

如果你要批量的给文档设定密码,可以稍微改造如下方法就可以办到,非常简单:

doc.Password = txtPassword.Text;

CloseDoc(doc);

 

 

退出word

vk_word_app.Quit( ref vk_false, ref vk_missing, ref vk_missing );

 

结论

       其实用vs2003操作对Word编程也不是很难的,只是参数还是不少,要想用好,那就靠多动手了。写得很简单,因为前面编译的那篇Visual Studio .NET自动化MS Word中已经很详细了。如果再有不明白,去查Word或者看我的源码。

http://sifang2004.cnblogs.com/archive/2006/06/15/426773.html

VS2003中基于Word2003编程

  VS2003中基于Word2003编程 曾经编译过一篇《用Visual Studio .NET自动化MS Word》,那是基于Word2000的,其实由于我跟这方面打交道不是太多,所以也就没有继续...
  • gdutcc
  • gdutcc
  • 2007年08月03日 19:31
  • 634

win10下 vs2003搜索崩溃卡死问题解决方案

win7 vs2003 全文搜索=卡死  解决办法是devenv.exe 右键 设置兼容 禁用外观视觉。即可。 win8 也有全文搜索卡死的问题。 但没有禁用视觉外观的选项。 ...
  • toptemp
  • toptemp
  • 2016年08月16日 15:37
  • 678

word 2003如何嵌入endnote菜单

首先打开Word,然后点击  工具->模板和加载项,共用模板和加载项(G),所选项目当前已经加载。勾选EndNote Cxyw.Dot。如果没有则把EndNote安装目录下的EndNote Cwyw....
  • hduxiejun
  • hduxiejun
  • 2015年11月13日 20:58
  • 2764

poi操作word模板(word2003,word2007)

待定
  • u010793590
  • u010793590
  • 2014年06月06日 13:02
  • 1935

VS2003 安装错误

在网上下的VS.NET2003中文版。放在E盘解压出来,安装到差不多一半的时候。突然弹出一句提示 说找不到E:/VS.NET2003/Program   Files/Microsoft   ...
  • sanfenlu
  • sanfenlu
  • 2010年07月21日 17:50
  • 2065

word2003 针对正文默认行距设置

很多时候,大家在设置行距时,在格式→段落→间距→行距中设置文档的行距,但是只是针对本次有效,下次又要重新进行设置,很麻烦! 是否可以对word进行默认行距设置,以后所有的文档在撰写时都是默认的行距值...
  • yuzifen
  • yuzifen
  • 2012年02月24日 11:21
  • 6160

vs 2003 中hash_map使用方法

vc 2003 中的hash_map与SGI STL中的定义有所不同,sgi stl中那个hash_map是根据hash值进行比较,但是VS 2003中的这个hash_map的定义是这样的:templ...
  • suppercom
  • suppercom
  • 2007年06月15日 23:53
  • 2963

再谈word2003编程

再谈word2003编程    近期因为项目需要,写了许多word2003编程的东东.有时候遇到难题想查sdk说明,很难找到中文解释,对于e文不好的我来说,简直是天书.想必很多人多有感慨.    下面...
  • zcty520
  • zcty520
  • 2010年10月19日 20:08
  • 279

win7 下VS2003 全文搜索就停止反应的解决方案

Win7 32bit/64bit环境下,在使用VS2003的查找功能时,会导致VS2003无响应。 解决方法:找到VS2003的安装目录,修改"...\Microsoft Visual Studio...
  • Tinna_zhang
  • Tinna_zhang
  • 2013年12月22日 15:34
  • 2296

VS2003错误大集合

 转人家的:      昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装,调试问题都被我碰到了,还好,我一个个把他记录下来了,同时,在CSDN找...
  • wai631
  • wai631
  • 2006年07月20日 14:25
  • 1981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VS2003中基于Word2003编程
举报原因:
原因补充:

(最多只允许输入30个字)