How to automate Microsoft Word to create a new document by using Visual C#


For a Microsoft Visual Basic .NET version of this article, see
316383.
For a Microsoft Visual Basic 6.0 version of this article, see
313193.

Summary


This step-by-step article describes how to create a new document in Microsoft Word by using Automation from Microsoft Visual C# 2005 or Microsoft Visual C# .NET.

Sample Code

The sample code in this article demonstrates how to do the following:

  • Insert paragraphs with text and formatting.
  • Browse and modify various ranges within a document.
  • Insert tables, format tables, and populate the tables with data.
  • Add a chart.

To create a new Word document by using Automation from Visual C# 2005 or Visual C# .NET, follow these steps: 

  1. Start Microsoft Visual Studio 2005 or Microsoft Visual Studio .NET.
  2. On the File menu, click New, and then click Project. Under Project Types, click Visual C# Projects, and then click Windows Application under Templates. Form1 is created by default.

    Note In Visual Studio 2005, click Visual C# instead of Visual C# Projects.

  3. Add a reference to Microsoft Word Object Library. To do this, follow these steps:
    1. On the Project menu, click Add Reference.
    2. On the COM tab, locate Microsoft Word Object Library, and then click Select.

      Note In Visual Studio 2005, you do not have to click
      Select.
      Note Microsoft Office 2003 includes Primary Interop Assemblies (PIAs). Microsoft Office XP does not include PIAs, but they can be downloaded. 
      For more information about Office XP PIAs, click the following article number to view the article in the Microsoft Knowledge Base:

      328912INFO: Microsoft Office XP PIAs Are Available for Download

    3. Click OK in the Add References dialog box to accept your selections. If you are prompted to generate wrappers for the libraries that you selected, click Yes.
  4. On the View menu, select Toolbox to display the Toolbox, and then add a button to Form1.
  5. Double-click Button1. The code window for the form appears.
  6. In the code window, replace the following code
    1. private void button1_Click(object sender, System.EventArgs e)
      {
      }

    with:

    1. private void button1_Click(object sender, System.EventArgs e)
      {
      object oMissing = System.Reflection.Missing.Value;
      object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */
    2. //Start Word and create a new document.
      Word._Application oWord;
      Word._Document oDoc;
      oWord = new Word.Application();
      oWord.Visible = true;
      oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
      ref oMissing, ref oMissing);
    3. //Insert a paragraph at the beginning of the document.
      Word.Paragraph oPara1;
      oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
      oPara1.Range.Text = "Heading 1";
      oPara1.Range.Font.Bold = 1;
      oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph.
      oPara1.Range.InsertParagraphAfter();
    4. //Insert a paragraph at the end of the document.
      Word.Paragraph oPara2;
      object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      oPara2 = oDoc.Content.Paragraphs.Add(ref oRng);
      oPara2.Range.Text = "Heading 2";
      oPara2.Format.SpaceAfter = 6;
      oPara2.Range.InsertParagraphAfter();
    5. //Insert another paragraph.
      Word.Paragraph oPara3;
      oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);
      oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:";
      oPara3.Range.Font.Bold = 0;
      oPara3.Format.SpaceAfter = 24;
      oPara3.Range.InsertParagraphAfter();
    6. //Insert a 3 x 5 table, fill it with data, and make the first row
      //bold and italic.
      Word.Table oTable;
      Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);
      oTable.Range.ParagraphFormat.SpaceAfter = 6;
      int r, c;
      string strText;
      for(r = 1; r <= 3; r++)
      for(c = 1; c <= 5; c++)
      {
      strText = "r" + r + "c" + c;
      oTable.Cell(r, c).Range.Text = strText;
      }
      oTable.Rows[1].Range.Font.Bold = 1;
      oTable.Rows[1].Range.Font.Italic = 1;
    7. //Add some text after the table.
      Word.Paragraph oPara4;
      oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      oPara4 = oDoc.Content.Paragraphs.Add(ref oRng);
      oPara4.Range.InsertParagraphBefore();
      oPara4.Range.Text = "And here's another table:";
      oPara4.Format.SpaceAfter = 24;
      oPara4.Range.InsertParagraphAfter();
    8. //Insert a 5 x 2 table, fill it with data, and change the column widths.
      wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing);
      oTable.Range.ParagraphFormat.SpaceAfter = 6;
      for(r = 1; r <= 5; r++)
      for(c = 1; c <= 2; c++)
      {
      strText = "r" + r + "c" + c;
      oTable.Cell(r, c).Range.Text = strText;
      }
      oTable.Columns[1].Width = oWord.InchesToPoints(2); //Change width of columns 1 & 2
      oTable.Columns[2].Width = oWord.InchesToPoints(3);
    9. //Keep inserting text. When you get to 7 inches from top of the
      //document, insert a hard page break.
      object oPos;
      double dPos = oWord.InchesToPoints(7);
      oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertParagraphAfter();
      do
      {
      wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      wrdRng.ParagraphFormat.SpaceAfter = 6;
      wrdRng.InsertAfter("A line of text");
      wrdRng.InsertParagraphAfter();
      oPos = wrdRng.get_Information
      (Word.WdInformation.wdVerticalPositionRelativeToPage);
      }
      while(dPos >= Convert.ToDouble(oPos));
      object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
      object oPageBreak = Word.WdBreakType.wdPageBreak;
      wrdRng.Collapse(ref oCollapseEnd);
      wrdRng.InsertBreak(ref oPageBreak);
      wrdRng.Collapse(ref oCollapseEnd);
      wrdRng.InsertAfter("We're now on page 2. Here's my chart:");
      wrdRng.InsertParagraphAfter();
    10. //Insert a chart.
      Word.InlineShape oShape;
      object oClassType = "MSGraph.Chart.8";
      wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing,
      ref oMissing, ref oMissing, ref oMissing,
      ref oMissing, ref oMissing, ref oMissing);
    11. //Demonstrate use of late bound oChart and oChartApp objects to
      //manipulate the chart object with MSGraph.
      object oChart;
      object oChartApp;
      oChart = oShape.OLEFormat.Object;
      oChartApp = oChart.GetType().InvokeMember("Application",
      BindingFlags.GetProperty, null, oChart, null);
    12. //Change the chart type to Line.
      object[] Parameters = new Object[1];
      Parameters[0] = 4; //xlLine = 4
      oChart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty,
      null, oChart, Parameters);
    13. //Update the chart image and quit MSGraph.
      oChartApp.GetType().InvokeMember("Update",
      BindingFlags.InvokeMethod, null, oChartApp, null);
      oChartApp.GetType().InvokeMember("Quit",
      BindingFlags.InvokeMethod, null, oChartApp, null);
      //... If desired, you can proceed from here using the Microsoft Graph
      //Object model on the oChart and oChartApp objects to make additional
      //changes to the chart.
    14. //Set the width of the chart.
      oShape.Width = oWord.InchesToPoints(6.25f);
      oShape.Height = oWord.InchesToPoints(3.57f);
    15. //Add text after the chart.
      wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
      wrdRng.InsertParagraphAfter();
      wrdRng.InsertAfter("THE END.");
    16. //Close this form.
      this.Close();
      }
  7. Scroll to the top of the code window. Add the following line to the end of the list of using directives:
    1. using Word = Microsoft.Office.Interop.Word;
      using System.Reflection;
  8. Press F5 to build and to run the program.
  9. Click Button1 to start Word Automation and to create the document.

After the code completes, examine the document that was created for you. The document contains two pages of formatted paragraphs, tables, and a chart.

Use a Template

If you are using Automation to build documents that are all in a common format, you can benefit from starting the process with a new document that is based on a preformatted template. Using a template with your Word Automation client has two significant advantages over building a document from nothing:

  • You can have greater control over the formatting and placement of objects throughout your documents.
  • You can build your documents with less code.

By using a template, you can fine-tune the placement of tables, paragraphs, and other objects within the document, as well as include formatting on those objects. By using Automation, you can create a new document based on your template with code such as the following:

  1. object oTemplate = "c:\\MyTemplate.dot";
    oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
    ref oMissing, ref oMissing);

In your template, you can define bookmarks so that your Automation client can fill in variable text at a specific location in the document, as follows:

  1. object oBookMark = "MyBookmark";
    oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";

Another advantage to using a template is that you can create and store formatting styles that you wish to apply at runtime, as follows:

  1. object oStyleName = "MyStyle";
    oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);

-or-

  1. object oStyleName = "MyStyle";
    oWord.Selection.set_Style(ref oStyleName);

References


For more information, click the following article numbers to view the articles in the Microsoft Knowledge Base:

301659HOWTO: Automate Microsoft Word to Perform Mail Merge from Visual C# .NET

302902HOWTO: Binding for Office Automation Servers with Visual C# .NET

For more information, visit the following Microsoft Developer Network (MSDN) Web sites:

How to automate Microsoft Word to create a new document by using Visual C#的更多相关文章

  1. Microsoft Word Regular Expression

    Microsoft Word Regular Expression Word裏的正則表達式-不一樣的符號. 一.Normal Find and Replace 二.Search by using wi ...

  2. Microsoft Word (2016) Deceptive File Reference ZDI-CAN-7949

    [+] Credits: John Page (aka hyp3rlinx) [+] Website: hyp3rlinx.altervista.org[+] Source:  http://hyp3 ...

  3. How to accept Track changes in Microsoft Word 2010?

    "Track changes" is wonderful and remarkable tool of Microsoft Word 2010. The feature allow ...

  4. 会务准备期间材料准备工作具体实施总结 ----(vim技巧应用, python信息提取与整合, microsoft word格式调整批量化)

    会务准备期间材料准备工作具体实施总结(vim, python, microsoft word) span.kw { color: #007020; font-weight: bold; } code ...

  5. Microsoft Word 段前距设置和页眉设置

    在毕设论文整理中,段前距的设置和页眉的设置不起作用,这着实让我脑袋疼.网上搜索了几种方式,搭配一下还是起了作用. 一. 段前距设置 1. 各级标题在首页,段前距设置不起作用. 选择要段前分页的段落,右 ...

  6. 使用 Microsoft Word 发布博客文章

    以 Microsoft Word 2010 为例: 依次选择:文件 -> 保存并发送 -> 发布为博客文章 配置说明:新建账户 的 博客文章 URL  一栏填写 http://rpc.cn ...

  7. Microsoft Word 的键盘快捷方式

    Microsoft Word 的键盘快捷方式 全部显示 全部隐藏 本帮助文章中描述的键盘快捷方式适用于美式键盘布局.其他键盘布局的键可能与美式键盘上的键 不完全对应. 注释   本文不介绍如何为宏或自 ...

  8. git 对 Microsoft Word 进行版本控制

    昨天中国高校发生了一件骇人听闻的事情,听说不少高校的校园网用户连接校园网被勒索病毒给黑了,重要文件全部被加密,必须要支付赎金才能解密,具体新闻可以参见:http://www.sohu.com/a/14 ...

  9. 算法提高 新建Microsoft Word文档

      算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出 ...

随机推荐

  1. kubernetes1.13.5安装部署

    Kubernetes 一.    Kubernetes介绍 各节点所需组件 Master:docker,kubeadm,kubelet, 组件 版本 备注 Kubelet 1.13.5 组件 Kube ...

  2. Cocos Creator学习一:学习目录以及v2.0 必须关注的网址

    学习目录: <Cocos Creator学习二:查找节点和查找组件> <Cocos Creator学习三:生命周期回调函数> <Cocos Creator学习四:按钮响应 ...

  3. Ketlle

    public class Kettle { private int volume; public Kettle(int water) {  volume =water;  System.out.pri ...

  4. 使用npm私有服务器保存公司内部强业务类型组件(二):vue-webpack框架

    一套基于vue webpack element-ui的npm私有服务器开发组件框架 下载 在配置的有两个地方需要注意: 1:配置library library选项: 如果设置此选项,会将bundle导 ...

  5. liunx-centos的安装学习篇

    1.centos下载地址:网易镜像:http://mirrors.163.com/centos/6/isos/搜狐镜像:http://mirrors.sohu.com/centos/6/isos/ 2 ...

  6. Linux基础命令mkdir

    mkdir  /home/ceshi   home目录下创建测试目录 mkdir  -p  /home/ceshi1/ceshi home目录下递归创建 mkdir     /home/ceshi2  ...

  7. springboot 使用Filter

    1. 创建 Filter 类,实现 Filter 接口 import javax.servlet.*; import javax.servlet.annotation.WebFilter; impor ...

  8. OneNote无法打开链接出现错误:你的组织策略阻止我们为你完成此操作

    首先打开注册表编辑器,按键盘win+r,调出运行窗口,输入regedit打开注册表编辑器 打开HKEY_CURRENT_USER\Software 打开\Classes 最后选中.html,在默认选项 ...

  9. 采用Tensorflow内部函数直接对模型进行冻结

    # enhance_raw.py # transform from single frame into multi-frame enhanced single raw from __future__ ...

  10. Python3+Requests-HTML+Requests-File解析本地html文件

    一.说明 解析html文件我喜欢用xpath不喜欢用BeautifulSoup,Requests的作者出了Requests-HTML后一般都用Requests-HTML. 但是Requests-HTM ...