c#读取Word模板,利用书签替换内容包括表格

 //生成WORD程序对象和WORD文档对象
            Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document doc = new Document();
            object miss = System.Reflection.Missing.Value; 

            try
            {
            //打开模板文档,并指定doc的文档类型
            //object objTemplate = System.Windows.Forms.Application.StartupPath + @"\UploadFiles\tz103.doc";

            //路径一定要正确

            object objTemplate = @"c:\\测试.docx";

            object objDocType = WdDocumentType.wdTypeDocument;

            object objfalse = false;

            object objtrue = true;

            doc = (Document)appWord.Documents.Add(ref objTemplate, ref objfalse, ref objDocType, ref objtrue);

            //获取模板中所有的书签

            Bookmarks odf = doc.Bookmarks;

            string[] testTableremarks = { "FirstParty", "SecondParty", "FirstPartySign", "SecondPartySign" };

            string[] testTablevalues = { "嘉实多(深圳)有限公司广州分公司", "广州嘉通", "嘉实多(深圳)有限公司广州分公司", "广州嘉通贸易有限公司" };

            //循环所有的书签,并给书签赋值

            for (int oIndex = 0; oIndex < testTableremarks.Length; oIndex++)
            {

                object obDD_Name = "";

                obDD_Name = testTableremarks[oIndex];

                //doc.Bookmarks.get_Item(ref obDD_Name).Range.Text = p_TestReportTable.Rows[0][testTablevalues[oIndex]].ToString();//此处Range也是WORD中很重要的一个对象,就是当前操作参数所在的区域

                odf.get_Item(ref obDD_Name).Range.Text = testTablevalues[oIndex];

            }

            //附件,插入表格
            //这里简单生成样例数据表,工作中要以实际的数据集为准
            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("name", typeof(string));
            dt.Columns.Add("age", typeof(string));

            DataRow dr = dt.NewRow();
            dr["name"] = "姓名"; dr["age"] = "年龄";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["name"] = "张三"; dr["age"] = "20";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["name"] = "李四"; dr["age"] = "25";
            dt.Rows.Add(dr);

            //附件一
            object obAttachMent = "Attachment1";
            //创建Word表格,并指定标签
            Microsoft.Office.Interop.Word.Table dtWord = doc.Tables.Add(odf.get_Item(ref obAttachMent).Range, dt.Rows.Count, dt.Columns.Count);

            dtWord.Borders.InsideLineStyle = WdLineStyle.wdLineStyleDot;
            dtWord.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleDot;

            //循环往表格里赋值
            for (int i = 1; i <= dt.Rows.Count; i++)
            {
                for (int j = 1; j <= dt.Columns.Count; j++)
                {
                    dtWord.Rows[i].Cells[j].Range.Text = dt.Rows[i - 1][j - 1].ToString();
                }
            }

            //第四步 生成word,将当前的文档对象另存为指定的路径,然后关闭doc对象。关闭应用程序

            object filename = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".docx";//HttpContext.Current.Server.MapPath("f:\\") + "Testing_" + DateTime.Now.ToShortDateString() + ".doc";
            object Password = "[email protected]";

            //对Word文档进行加密保护,不允许编辑
            if (Password !=null)
                 {
                     doc.Protect(WdProtectionType.wdAllowOnlyReading, ref objfalse, ref Password, ref miss, ref miss);
                 }

            doc.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss,
                ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);

            object doNotSaveChanges = WdSaveOptions.wdDoNotSaveChanges;

            doc.Close(ref doNotSaveChanges, ref miss, ref miss);

            appWord.Application.Quit(ref miss, ref miss, ref miss);

            doc = null;

            appWord = null;

             MessageBox.Show("生成成功!");

            System.Diagnostics.Process.Start(filename.ToString());//打开文档

            }
            catch (Exception)
            {
                doc.Close(ref miss, ref miss, ref miss);
                appWord.Application.Quit(ref miss, ref miss, ref miss);
                doc = null;
                appWord = null;
            }
时间: 2024-11-05 16:02:41

c#读取Word模板,利用书签替换内容包括表格的相关文章

使用NOPI读取Word、Excel文档内容

使用NOPI读取Excel的例子很多,读取Word的例子不多. Excel的解析方式有多中,可以使用ODBC查询,把Excel作为一个数据集对待.也可以使用文档结构模型的方式进行解析,即解析Workbook(工作簿).Sheet.Row.Column. Word的解析比较复杂,因为Word的文档结构模型定义较为复杂.解析Word或者Excel,关键是理解Word.Excel的文档对象模型. Word.Excel文档对象模型的解析,可以通过COM接口调用,此类方式使用较广.(可以录制宏代码,然后替

[转]C#操作word模板插入文字、图片及表格详细步骤

c#操作word模板插入文字.图片及表格 1.建立word模板文件 person.dot用书签 标示相关字段的填充位置 2.建立web应用程序 加入Microsoft.Office.Interop.Word引用具体添加引用请参看http://www.microsoft.com/china/msdn/library/office/office/OfficePrIntopAssFAQ.mspx?mfr=true 3.相关示例代码 protected void CreateReport_Click(o

C#读取Word模板替换相应的字符串(标签)生成新的Word

在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc文件,这样的好处是方便,快捷,能满足大部分的需求.不过有些特殊的需求并不能满足,如要生成的Word为一个表格,只是一部分字符串需要变化,用上面的方法生成Word表格容易变形.如果我们能读取一个word模板,把模板里定义的固定字符串如{标记1}替换为想要的文字,然后生成新的word.这样生成的Word非常整洁. 查找了网上许多方法,虽然都是调用office的接口,并没有一个好的方案.通过自己的实验,比较,使用Mi

C#读取word文档中的内容

原文地址 http://blog.csdn.net/yhrun/article/details/7674540 在使用前需要添加引用巨硬的com组件:Microsoft Word 12.0 object library    ^^^^^2007对应的是12.0的 添加引用→COM→选择Microsoft Word 12.0 object library 然后在namespace上面写下:using Word = Microsoft.Office.Interop.Word; 这样,添加引用就算OK

使用VBA将Excel指定单元格数据、字符串或者图表对象插入到Word模板指定书签处

准备工作: 1.首先需要提供一个word模板,并且标记好您要插入书签的位置,定义书签的命名.如图 2.模拟您要插入的Excel原始数据和图表对象 插入代码如下: Private Sub CommandButton1_Click() Dim App, WrdDoc, Mypath As String On Error Resume Next '定义原始模板的储存路径,默认和excel在同一路径 Mypath = ThisWorkbook.Path & "\模板.doc" '用Se

.NET使用NPOI读取Word模板并替换关键字并下载

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写 NPOI下载地址:http://npoi.codeplex.com/ 以下代码仅供参考,请根据实际需求进行修改. public MemoryStream Export() { string filepath = Server.MapPath("/word/xmx

根据word模板导出,替换

using System; using System.Collections.Generic; using System.Linq; using System.Text; using xyxx_base.Models; using istrong.db; using Aspose.Words; using System.IO; using System.Configuration; namespace xyxx_base.Common { public static class WordHelp

word中利用宏替换标点标点全角与半角

Alt+F11,然后插入-模块: 复制下面代码到编辑窗口: Sub 半角标点符号转换为全角标点符号() '中英互译文档中将中文段落中的英文标点符号替换为中文标点符号 Dim i As Paragraph, ChineseInterpunction() As Variant, EnglishInterpunction() As Variant Dim MyRange As Range, N As Byte '定义一个中文标点的数组对象 ChineseInterpunction = Array(".

C# 利用WORD模板和标签(bookmark) 批量生成WORD

前言: 由于对C#操作WORD不熟悉,也就留下这么一篇水文,别吐糟...=_=||| 利用Microsoft.Office.Interop.Word (2003版也就11版)——因为部分客户端还是用Office2003,所以保险起见应该引入低一点的版本 我的需求很简单,从DataTable里面循环取数据批量生成Word文档,解决方案是利用Word模板.dot插入书签并保存为程序使用的模板, 用C#打开word模板修改书签的值并批量生成Word. 遇到的问题: 我的思路是打开模板,然后循环修改书签