具体思路:

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

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

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

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

  优点:

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

  缺点:

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

  操作过程&代码:

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

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

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

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

  2)准备工作

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

  3)拷贝模版生成新文件

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

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

 wordDoc = wordApp.Documents.Open(ref obj_FileName);//打开新文件,进行操作

 wordDoc.Activate();//设置现在操作的文件

  5)依据书签修改word内容

//循环书签,判断书签名称,并为其赋值
foreach (MSWord.Bookmark bm in wordDoc.Bookmarks)
{
if (bm.Name == "billno")
{
bm.Select();
bm.Range.Text = "2008";
}
if (bm.Name == "dated")
{
bm.Select();
bm.Range.Text = DateTime.Now.ToString();
}
}

  6)关闭文件

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

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

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD");
foreach (System.Diagnostics.Process p in processes)
{
bool b = p.MainWindowTitle == "";
if (p.MainWindowTitle == "")
{
p.Kill();
}
}

  8)下载

Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Path.GetFileName(FileName),
System.Text.Encoding.UTF8));
Response.ContentType = "application/msword";
Response.TransmitFile(FileName);
Response.Flush();
Response.End();

  转自:https://www.cnblogs.com/jydeng/p/4398500.html

具体思路:

  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 }

asp.net使用动态模版导出word的更多相关文章

  1. PowerDesiger 15逆向生成工程E-R图及导出word表格

    应用环境:win8(64位)+oracle10g(32位)服务端+PowerDesigner15 需求:oracle数据库中的表结构是web工程框架hibernate 自动生成,现需要将数据库中已有的 ...

  2. ASP.NET导出word实例

    ASP.NET导出word实例 最近遇到一个题目就是如何在asp.net中将数据导出到word中,由于数据是动态的,所以需要在后台拼出想要的的格式,翻遍了网页找出了一个比较满意的代码,感谢那位高手.代 ...

  3. ASP.NET MVC 导出Word报表

    最近要做MVC导出Word报表功能.查了查资料发现一个好用的插件就是Aspose.Word.这个插件也很有名气,也很好用. 1.首先就是引用该插件 2.填充Word模版 3.后台操作 private ...

  4. 【C#点滴记录】ASP.NET 使用C# 导出Word 和Excel

    原文摘自 慧优米网,链接地址:http://huiyoumi.wang/upload/forum.php?mod=viewthread&tid=797&extra= 好了正文来了 今天 ...

  5. 在ASP.NET中将GridView数据导出到Word、Excel

    在ASP.NET中将GridView数据导出到Word.Excel asp.net,导出gridview数据到Word,Excel,PDF   #region Export to Word, Exce ...

  6. Asp.net通过模板(.dot/Html)导出Word,同时导出图片

    一.Office组件导出Word(服务器配置麻烦) 需要引用Office的DLL,在下文的附件中,不同的Offic版本用的不一样,虽然高级版本可以兼容低级的,不过,还是统一版本最好 贴上核心代码(转载 ...

  7. Java使用IText(VM模版)导出PDF,IText导出word(二)

    ===============action=========================== //退款导出word    public void exportWordTk() throws IOE ...

  8. java 导出word 并下载

    记录一下导出操作 源码: /************ * 导出word 并下载 * @param id 房号记录编号 * ***********************/ @RequestMappin ...

  9. 导出Excel And 导出word

      <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default6.aspx. ...

随机推荐

  1. Leetcode——413. 等差数列划分

    题目描绘:题目链接 题目中需要求解一个数组中等差数组的个数,这个问题可以利用动态规划的思路来分析. 三步骤: 1:问题归纳.题目需要求解等差数列的和,我们可以用一个数组保存前i个元素可以构成的等差数列 ...

  2. 第18章 SysTick—系统定时器

    第18章     SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  3. MSP430F5438A的串口

    设置串口,最关键的是波特率的设置,推荐一个网站,很方便地计算波特率,http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP43 ...

  4. 20155239 《网络对抗》Exp4 恶意代码分析

    20155239 <网络对抗>Exp4 恶意代码分析 使用schtasks指令监控系统运行 先在C盘目录下建立一个netstatlog.bat文件,用来将记录的联网结果格式化输出到nets ...

  5. 20155321 《网络攻防》 Exp3 免杀原理与实践

    20155321 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 根据实验指导书,杀软有两个方法可以检测出恶意代码.第一种是基于特征码,即先对流行代码特 ...

  6. 总结 : C#事件理解

    要理解事件,首先必须理解委托!! 1.如果说委托是一个类型,那么事件就是一个对象! 2.事件的创建必须是借助某个委托类型来完成的! 3.也就是说,委托是事件的类型,事件本身是个对象!! 4.所以,事件 ...

  7. linux gz 解压缩

    Linux压缩保留源文件的方法:gzip –c filename > filename.gzLinux解压缩保留源文件的方法:gunzip –c filename.gz > filenam ...

  8. 01-BAT算法特训班

  9. 微信小程序之自定义组件的应用

    小程序支持自定义组件,下面是一个简单的购物车组件,实现的效果如图: 效果图 创建组件 在根目录创建components目录,然后创建计数组件 count 如图: 组件内容 <!--compone ...

  10. 简单模拟flume

    NetCat方式: 远程访问的方式进行消息传递 配置一个Agent,主要配置三个组件: source, channel, sink 上图中为什么channel会带s,变成channels? 可以绑定多 ...