asp.net根据模版生成Word小记

  最近遇到一个问题,客户提了一个新的需求,客户想要将显示在网页上的数据导出成Word进行套打,由于之前没有接触过这一块的内容,自己写的系统也没有使用这种功能,现在重头学习。

  具体思路:

  1.先制作Word模版,使用文本框+书签的方式来设计模版;

  2.模版制作完之后,根据模版生成新文件,使用File.Copy方法,生成.doc格式新文件;

  3.后台取得数据,参照网页渲染的方式标记数据流,方便之后的写入操作;

  4.编辑新文件,根据程序中标记与书签的对应关系,利用类库中的方法来修改书签的内容,最后保存文件即可。

  优点:

  能够自定义元素的位置,方法也很简单易懂,如果只是表格之类的简单格式会很适用。

  缺点:

  灵活性不好,如果要套打的对象是网页,且不是表格形式的,还原程度不好,而且如果文字内容过多会出现超出文本框范围的情况。

  操作过程&代码:

  1)第一步,引入对应的程序集

  如果不是使用第三方的类库的话,是不需要下载的,只要你的系统完整安装了office,你的系统程序集中就会带有操作Word的程序集。

  首先,添加引用Microsoft.Office.Interop.Word,之后,在类中添加相对应的引用:

1 using MSWord = Microsoft.Office.Interop.Word; //这里重命名为MSWord,之后使用的时候就可以简写了
2 using System.IO;//要操作文件的话,要引用系统IO
3 using System.Reflection;

  2)准备工作

1 MSWord.Application wordApp = new MSWord.Application();//word应用程序变量
2 MSWord.Document wordDoc;//word文档变量
3 string TemplateFile = @"D:\Model.doc"; //模版文件的路径,
4 string FileName = @"D:\" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ".doc";//新文件的路径

  3)拷贝模版生成新文件

1 File.Copy(TemplateFile, FileName);//首先要拷贝一份文件
2 object obj_FileName = FileName;//新建一个obj变量用于操作

  4)设置操作类型,操作类型有很多中,这里要打开新文件,修改其中的内容

1 wordDoc = wordApp.Documents.Open(ref obj_FileName);//打开新文件,进行操作
2
3 wordDoc.Activate();//设置现在操作的文件

  5)依据书签修改word内容

 1  //循环书签,判断书签名称,并为其赋值
 2   foreach (MSWord.Bookmark bm in wordDoc.Bookmarks)
 3   {
 4       if (bm.Name == "billno")
 5           {
 6            bm.Select();
 7            bm.Range.Text = "2008";
 8          }
 9           if (bm.Name == "dated")
10              {
11                bm.Select();
12                bm.Range.Text = DateTime.Now.ToString();
13              }
14         }

  6)关闭文件

1   wordDoc.SaveAs2(obj_FileName);//保存文件
2   wordDoc.Close();//关闭文档对象
3   wordApp.Quit();//关闭应用程序对象

  7)杀进程,有的情况下,关闭Word文件会不成功,会残留很多word进程

1 System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD");
2 foreach (System.Diagnostics.Process p in processes)
3    {
4        bool b = p.MainWindowTitle == "";
5        if (p.MainWindowTitle == "")
6             {
7               p.Kill();
8             }
9     }
时间: 2024-10-11 16:16:49

asp.net根据模版生成Word小记的相关文章

poi根据模版生成多页word,并压缩下载

前端时间公司有个项目,需求大致是这样的——根据word模版,生成带学生照片的信息表格.如果是批量打印,则生成一个word文档,每个学生占用一页. 在实现时,参考了两位老哥的代码: 使用poi根据模版生成word文档,支持插入数据和图片: poi替换word模板内容 并且合并生成多页的word 实现分页. 先上工具类的代码: import org.apache.poi.xwpf.usermodel.*; import javax.servlet.http.HttpServletResponse;

ASP.NET生成WORD文档,服务器部署注意事项

网上转的,留查备用,我服务器装的office2007所以修改的是Microsoft Office word97 - 2003 文档这一个. ASP.NET生成WORD文档服务器部署注意事项 1.Asp.net 2.0在配置Microsoft Excel.Microsoft Word应用程序权限时 error: 80070005 和8000401a 的解决总   2007-11-01 11:30  检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-00000

asp.net生成word文档服务器配置

一.asp.net生成word文档,布署到正式的服务器上就出现           错误:System.Runtime.InteropServices.COMException (0x800A1098): 因为没有打开的文档,所以这一命令无效,就是thisApplication.Documents.Add的时候打不开或者创建不了word文档.            经过网络工程师交流后才把问题解决了.     解决方案:Windows Server 2008的安全性造成的,在Microsoft 

velocity模板技术生成word文档

本文介绍采用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容如下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项目velocityTest,加入Velocity所依赖的Jar包velocity-dep-1.5-beta2.jar. 4.在src目录下新建一个velocity.vm文件,将第二步生成的velocity.htm用文本编辑器打开,复制内容到velocity.vm中.内容如下: <html xmlns:v

POI加dom4j将数据库的数据按一定格式生成word文档

一:需求:将从数据库查处来的数据,生成word文档,并有固定的格式.(dom4j的jar包+poi的jar包) 二:解决:(1)先建立固定格式的word文档(2007版本以上),另存成为xml文件,作为模板.(修改xml节点,添加属性,用于标示要填固定数据的节点) (2)dom4j解析模板xml文件,将文件读入内存,并把数据库数据写入内存的xml模型中 (3)利用poi将内存中的含有数据库内容的xml模型转换成word内存模型,利用输出流输出word文档 三:DEMO [1]模板的word文档

Xml生成word 技巧一

Xml生成word文档的几个基本步骤,就是先定义xml,再生成xml框架.经过一天的折腾,发现其实可以不用生成xsd文件,只要把xml文件另存为word就可以了.还是通过昨天的例子说明. 1.  xml另存为word文档log.doc 2.打开log.doc就可以看到绑定了框架的文档 ,打开右边任务窗口可以看到 3.可以把文档内容删掉,重新设计文档模版,并另存为log_doc.xml 4.接下来的步骤就跟之前的一样了,生成xslt文件

freemarker生成word文档

利用freemarker生成word文档步骤: 导入jar包:freemarker-2.3.20.jar 新建word模板,调整好样式, word模板另存为2003 xml格式, xml中需要替换的内容用${param}替换,param为参数名称,例如:${name } ,传入参数map.put("name","张三"); 编写java代码,替换xml文档,导出. 1 /** 2 *@文件名称: CreateWord.java 3 *@日期: 2016-5-19 4

OpenXml操作Word的一些操作总结.无word组件生成word.

OpenXml相对于用MS提供的COM组件来生成WORD,有如下优势: 1.相对于MS 的COM组件,因为版本带来的不兼容问题,及各种会生成WORD半途会崩溃的问题. 2.对比填满一张30多页的WORD来说(包含图,表等),用COM组件来生成会占用20秒,Openxml1秒. 3.MS Word软件太贵了,你的客户装的是开源WORD,如LibreOffice,OpenOffice.这样你就只能用Openxml生成的WORD文档,各种支持MS Word都能打开,避免客户机器上安装MS Word.

数据库数据导入导出系列之五 C#实现动态生成Word(转)

1. 一个控制台例子,实现动态生成Word. 首先,添加引用:COM->Microsoft Word 11.0 Object Library. 2. 介绍几篇牛人写的关于操作Word的文章 [分享]一段导出到word模版的代码 http://www.cnblogs.com/goody9807/archive/2005/08/25/222526.html 再谈word2003编程 http://www.cnblogs.com/Andmm/archive/2008/06/18/1224422.htm