首页 > 编程语言 >C#操作Microsoft.Office.Interop.Word类库完整例子

C#操作Microsoft.Office.Interop.Word类库完整例子

时间:2023-11-16 12:45:13浏览次数:33  
标签:类库 Word Office oMissing wordApp 例子 文档 ref

使用Microsoft.Office.Interop.Word类库操作wor文档 一.准备工作 首先在工厂中,引用【Microsoft.Office.Interop.Word】,本地安装了world,就能找到这个类库,如下图。Form1系统自动生成的

Form1的界面很简单,就一个按钮

 二 4个完整实例

4个实例,自测过的,都可用,适用很多种情况操作world。完整代码如下

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 using MSWord = Microsoft.Office.Interop.Word;
 11 
 12 namespace _24_word_and_excel_Operator
 13 {
 14     public partial class Form1 : Form
 15     {
 16         object oMissing = System.Reflection.Missing.Value;
 17         public Form1()
 18         {
 19             InitializeComponent();
 20         }
 21 
 22         private void button1_Click(object sender, EventArgs e)
 23         {
 24             //例子1:新建一个word文档,填入自定义的内容
 25             Example1();
 26 
 27             //例子2:操作模板的例子
 28             Example2();
 29 
 30             //例子3:操作模板的例子,是例子2的一个简单版本
 31             Example3();
 32 
 33             //例子4:复杂的例子,操作模板,标签内填值,文档中画表格,表格中填值。文档中填
 34             Example4(@"D:\110 - C#实例集合\100 - 实例集合\24 word and excel Operator\bin\Debug\测试文档.docx");
 35         }
 36         /// <summary>
 37         /// 新建一个word文档,填入自定义的内容
 38         /// </summary>
 39         private void Example1()
 40         {
 41             //创建一个新的Word应用程序对象
 42             Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
 43             //创建一个新的Word文档对象,就是创建一个空白的文档
 44             MSWord.Document doc = wordApp.Documents.Add();
 45             // 在新文档中添加内容
 46             MSWord.Paragraph paragraph = doc.Paragraphs.Add();
 47             paragraph.Range.Text = "Hello, World! This is a sample Word document.";
 48 
 49             // 保存文档,注意:filePath路径要带上文件名
 50             string filePath = @"D:\110 - C#实例集合\100 - 实例集合\24 word and excel Operator\bin\Debug\Test\test.docx";
 51             doc.SaveAs(filePath);
 52 
 53             // 关闭Word应用程序
 54             wordApp.Quit();
 55         }
 56 
 57         /// <summary>
 58         /// 操作模板的例子
 59         /// </summary>
 60         private void Example2()
 61         {
 62             // 模板文件路径
 63             string templatePath = @"D:\110 - C#实例集合\100 - 实例集合\24 word and excel Operator\bin\Debug\测试文档.docx";
 64             // 生成的文档保存路径
 65             string newDocumentPath = @"D:\110 - C#实例集合\100 - 实例集合\24 word and excel Operator\bin\Debug\Test\新文档.docx";
 66 
 67             // 创建Word应用程序对象
 68             Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
 69 
 70             // 打开模板文档
 71             Microsoft.Office.Interop.Word.Document templateDocument = wordApp.Documents.Open(templatePath);
 72 
 73             // 复制模板文档的内容
 74             templateDocument.Content.Copy();
 75 
 76             // 创建一个新的空白文档
 77             Microsoft.Office.Interop.Word.Document newDocument = wordApp.Documents.Add();
 78 
 79             // 将复制的内容粘贴到新文档中
 80             newDocument.Content.Paste();
 81 
 82             // 修改新文档的内容
 83             MSWord.Paragraph paragraph = newDocument.Content.Paragraphs.Add();
 84             paragraph.Range.Text = "This is a document generated from a template.";
 85 
 86             // 保存新文档
 87             newDocument.SaveAs(newDocumentPath);
 88 
 89             // 关闭模板文档
 90             templateDocument.Close();
 91 
 92             // 关闭Word应用程序
 93             wordApp.Quit();
 94         }
 95         /// <summary>
 96         /// 操作模板的例子,是例子2的一个简单版本
 97         /// </summary>
 98         /// <param name="templatePath"></param>
 99         /// <param name="outputPath"></param>
100         public void Example3()
101         {
102             string templatePath = @"D:\110 - C#实例集合\100 - 实例集合\24 word and excel Operator\bin\Debug\测试文档.docx";
103             string outputPath = @"D:\110 - C#实例集合\100 - 实例集合\24 word and excel Operator\bin\Debug\Test\例子3的文档.docx";
104 
105             // 创建Word应用程序对象
106             Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
107             // 打开模板文档
108             MSWord.Document wordDoc = wordApp.Documents.Open(templatePath);
109             {
110                 //这里就是要干什么事了,替换文字,添加内容等操作
111                 // 替换模板中的文本
112                 FindAndReplace(wordDoc, "要替换的文字", "替换后的文字");
113                 // 修改新文档的内容
114                 MSWord.Paragraph paragraph = wordDoc.Content.Paragraphs.Add();
115                 paragraph.Range.Text = "This is a document generated from a template.";
116             }
117 
118             // 保存为新文档
119             wordDoc.SaveAs2(outputPath);
120             // 关闭Word应用程序对象
121             wordApp.Quit();
122         }
123 
124         private void FindAndReplace(MSWord.Document doc, string findText, string replaceText)
125         {
126             // 将模板设为可编辑
127             doc.Activate();
128 
129             // 执行查找和替换操作
130             // 可以使用其他查找和替换方法,例如使用Range对象
131             object findObj = findText;
132             object replaceObj = replaceText;
133             object missingObj = Type.Missing;
134             doc.Content.Find.Execute(ref findObj, ref missingObj, ref missingObj, ref missingObj, ref missingObj,
135                 ref missingObj, ref missingObj, ref missingObj, ref missingObj, ref replaceObj, ref missingObj,
136                 ref missingObj, ref missingObj, ref missingObj, ref missingObj);
137         }
138         private void Example4(string strPath)
139         {
140             object oTemplate = strPath;
141             MSWord.Application wordApp = new MSWord.Application();// 创建一个新的Word应用程序对象
142             wordApp.Visible = true;
143             MSWord.Document oDoc = wordApp.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);// 创建一个新的Word文档对象
144 
145             //填写标签
146             object[] bookMark = new object[3];
147             bookMark[0] = "Test1";
148             bookMark[1] = "Test2";
149             oDoc.Bookmarks.get_Item(ref bookMark[0]).Range.Text = "第1个标签";
150             oDoc.Bookmarks.get_Item(ref bookMark[1]).Range.Text = "第2个标签";
151 
152 
153             //定义一个Word中的表格对象
154             oDoc.Paragraphs.Last.Range.Text = "直接接入式(正向电能)";
155 
156             object unite = MSWord.WdUnits.wdStory;
157             oDoc.Content.InsertAfter("\n");
158             wordApp.Selection.EndKey(ref unite, ref oMissing);
159             wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
160             object WdLine2 = MSWord.WdUnits.wdLine;//换一行;
161             wordApp.Selection.MoveDown(ref WdLine2, 6, ref oMissing);
162 
163             int iRow = 5;
164             int iColumn = 3;
165             MSWord.Table table = oDoc.Tables.Add(wordApp.Selection.Range, iRow, iColumn, ref oMissing, ref oMissing);
166             table.Borders.Enable = 1;
167             for (int i = 1; i < iRow + 1; i++)
168             {
169                 if (i == 1)
170                 {
171                     table.Cell(i, 1).Range.Text = "电压(V)";
172                     table.Cell(i, 2).Range.Text = "电流(A)";
173                     table.Cell(i, 3).Range.Text = "电能误差(%)";
174                 }
175                 else
176                 {
177                     table.Cell(i, 1).Range.Text = (i + 1).ToString();
178                     table.Cell(i, 2).Range.Text = (i + 2).ToString();
179                     table.Cell(i, 3).Range.Text = (i + 3).ToString();
180                 }
181             }
182             table.Range.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
183 
184             //文档最后填写文字
185             oDoc.Paragraphs.Last.Range.Text = "文档最后的位置:\n\r";
186 
187             string docname = string.Empty;
188             docname = $"文档名称";
189 
190             //弹出保存文件对话框,保存生成的Word
191             SaveFileDialog sfd = new SaveFileDialog
192             {
193                 Filter = "Word Document(*.docx)|*.docx",
194                 DefaultExt = "Word Document(*.docx)|*.docx",
195                 FileName = docname
196             };
197             if (sfd.ShowDialog() == DialogResult.OK)
198             {
199                 object filename = sfd.FileName;
200                 oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,
201                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
202                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
203                 ref oMissing, ref oMissing);
204 
205                 // 关闭Word应用程序对象
206                 wordApp.Quit();
207             }
208         }
209     }
210 }

三 代码分析解读 (重点部分)

 例子1:适用的情况是,代码创建一个新的world文档的情况

注意:无论是例子1,例子2,例子3,其中的路径,要填写自己本地的路径。

 

 

例子2和例子3:

两个例子都是操作world模板的,例子2代码复杂写,例子3精简写。效果都是一样的。

例子3中,SaveAs2 方法是 SaveAs 方法的扩展版本,支持更多的保存选项和参数。例子3中, wordDoc.SaveAs2(outputPath);中 outputPath是指定要保存文档的完整路径,包括文件名和文件扩展名。效果如下图

 

例子4:这个例子稍微复杂一下,设计文档中先插入好标签,标签地方填值,文档中画出表格,表格中填值,文档最后追加文档等操作。

模板文档的标签如下图:

例子4的效果如下图:

 

 

 

 

 

 

标签:类库,Word,Office,oMissing,wordApp,例子,文档,ref
From: https://www.cnblogs.com/dfcq/p/17835865.html

相关文章

  • WPS word制作不同样式水平线的快捷方法
    shift键+~键插入三个【~】符号,然后按下键盘上的回车键,之后就会显示出一条波浪线。输入三个【=】符号,之后再按下键盘上的enter键,一条粗的直线。输入三个【*】符号,并且用同样的操作方法,按下回车键,就会得到一个小黑点的水平线线条。输入三个【---】符号,按下回车键,得到一条细直线......
  • Python读取pdf、word、excel、ppt、csv和txt文件提取所有文本
    前言本文对使用python读取pdf、word、excel、ppt、csv、txt等常用文件,并提取所有文本的方法进行分享和使用总结。可以读取不同文件的库和方法当然不止下面分享的这些,本文的代码主要目标都是:方便提取文件中所有文本的实现方式。这些库的更多使用方法,请到官方文档中查阅。读取PD......
  • SQLSERVER 2016新建订阅,连接发布服务器时报错“设置连接字符串后无法更改或读取属性 P
    被此问题困扰许久,查遍全网也没有查到合适的解决方案。特此记录,希望帮到需要的人。SQLSERVER2016新建订阅,连接发布服务器时报错“设置连接字符串后无法更改或读取属性Password。(Microsoft.SqlServer.ConnectionInfo)”===================================设置连接字符串......
  • Windows和Linux服务器安装OnlyOffice服务
    1.Windows安装OnlyOffice服务1.1 启用Hyper-V启用Hyper-V以在Windows10上创建虚拟机:详情参考微软官方教程......
  • 将ECharts图表插入到Word文档中
    @目录在后端调用JS代码准备ECharts库生成Word文档项目地址库封装本文示例EChartsGen_DocTemplateTool_Sample如何通过ECharts在后台生成图片,然后插入到Word文档中?首先要解决一个问题:总所周知,ECharts是前端的一个图表库,如何在后台调用JS代码?这里就要用到PhantomJS了。PhantomJ......
  • play wordle
    好像烂大街了。。。这里用的词库有\(8869\)个词。先形式化wordle游戏:给定词库\(S\),所有词的长度为\(5\),要求你猜一个词\(w\),每一轮可以输入一个词\(s\),并返回一个长为\(5\)的数列\(r\):\[r_i=\begin{cases}0,&s_i\neqw_i,\forallj,s_i\neqw_j\\1,&s_i\neqw_i......
  • java 使用documents4j将word转pdf
    documents4j简介document4j是一个用来进行文档格式转换的Java工具库,它通过借助本机中支持指定文件格式到目标文件格式转换的应用,来实现整个转换的过程。document4j实现了MicrosoftWord、Excel的适配功能,可以将docx文件转换为pdf文件,并且在这个过程中不会出现非微软文件转换出......
  • CS224n笔记:word2vec(1)
    目录离散语义(discrete):分布语义(distribute):tokens、types分布的语言模型(distributionallanguagemodel):词嵌入模型Word2VecObjectivefunc(目标函数)Lossfunc(损失函数)P(O|C)和Softmax(x)P(O|C)的概率分布将损失函数展开求梯度公式损失函数的时间复杂度ChainRule:链......
  • 智能化工业园区设计方案-(180页 WORD版)
    智慧化工园区建设致力于通过先进的信息技术和数据管理系统,实现对工业过程的监控、分析和优化,从而提升运营效率并优化资源配置。通过实时监测和分析生产数据,管理者可以更好地了解工艺流程,发现潜在问题并进行及时干预,从而降低生产成本和风险。·数字化技术在智慧化工园区建设中扮演着......
  • WordPress主题 JustNews主题6.0.1(亲测首页不空白)
    介绍资源入口需要用WordPress5.X版本JustNews介绍:一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题,自v3.0版开始支持自主研发的前端用户中心,不仅支持注册、登录、账户设置、个人中心等常用页面的添加,还可以上传头像、设置用户分组等等!更新介绍JustNews主题更新......