C#实现按Word模板导出Word(加书签bookMark)
本方法是针对word导出操作,需要制作好的模板文件 模板.doc
引入应用Microsoft.Office.Interop.Word 11.0 (office2003)
导出文件注意:有时候迅雷会在浏览器中安装插件,下载时会默认使用迅雷下载,导致下载的文档格式丢失,这时为了避免错误,可以将下载方法DownFile()写在另一个页面中,通过session将参数传递过去就可以
- /// <summary>
- /// 导出按钮
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
- {
- string id;
- id = Session["ObjChangeID"].ToString();
- try
- {
- if (id!=null)
- {
- string _filePath = PrintDoc(id);
- if (_filePath != "")
- {
- DownloadFile(_filePath, Path.GetFileName(_filePath));//下载文件
- }
- }
- }
- catch (Exception ex)
- {
- ZWL.Common.PublicMethod.errorLog("ibtnExport_Click", ex);
- }
- }
- /// <summary>
- /// 打印操作,传入车辆Carcod或者变更ID
- /// </summary>
- /// <param name="id"></param>
- protected string PrintDoc(string id)
- {
- Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
- Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();
- try
- {
- if (id.Length != )
- {
- objCarInfor.OpenCar(id);
- string templeteName = "模版.doc", downName = "";///模板文件名称
- downName = objCarInfor.ORG_NAME + "新文件.doc";//导出文件名
- string templeteFile = System.Web.HttpContext.Current.Server.MapPath("~/") + "DocTempalete\\" + templeteName;//模板文件全路径
- string downFile = System.Web.HttpContext.Current.Server.MapPath("~/") + "ReportFile\\gonghan\\" + downName;///导出文件全路径
- try
- {
- File.Delete(downFile);//删除原有的同名文件
- }
- catch
- {
- }
- File.Copy(templeteFile, downFile);//复制模板文件到导出文件对应的文件夹下存档
- object Obj_FileName = downFile;
- object Visible = false;
- object ReadOnly = false;
- object missing = System.Reflection.Missing.Value;
- //打开文件
- doc = app.Documents.Open(ref Obj_FileName, ref missing, ref ReadOnly, ref missing,
- ref missing, ref missing, ref missing, ref missing,
- ref missing, ref missing, ref missing, ref Visible,
- ref missing, ref missing, ref missing,
- ref missing);
- doc.Activate();
- #region 给模板填入类容
- //光标转到书签
- object BookMarkName = "函号";
- object what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
- if (app.ActiveDocument.Bookmarks.Exists(BookMarkName.ToString()) == true)
- {
- doc.ActiveWindow.Selection.GoTo(ref what, ref missing, ref missing, ref BookMarkName);
- doc.ActiveWindow.Selection.TypeText(System.DateTime.Now.ToString("yyMMdd"));
- }
- BookMarkName = "年";
- what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
- if (app.ActiveDocument.Bookmarks.Exists(BookMarkName.ToString()) == true)
- {
- doc.ActiveWindow.Selection.GoTo(ref what, ref missing, ref missing, ref BookMarkName);
- doc.ActiveWindow.Selection.TypeText(DateTime.Now.ToString("yy"));
- }
- BookMarkName = "月";
- what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
- if (app.ActiveDocument.Bookmarks.Exists(BookMarkName.ToString()) == true)
- {
- doc.ActiveWindow.Selection.GoTo(ref what, ref missing, ref missing, ref BookMarkName);
- doc.ActiveWindow.Selection.TypeText(DateTime.Now.ToString("MM"));
- }
- BookMarkName = "日";
- what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
- if (app.ActiveDocument.Bookmarks.Exists(BookMarkName.ToString()) == true)
- {
- doc.ActiveWindow.Selection.GoTo(ref what, ref missing, ref missing, ref BookMarkName);
- doc.ActiveWindow.Selection.TypeText(DateTime.Now.ToString("dd"));
- }
- ///注意:书签必须不一样才能真确绑定,如果说模板中有需要出现两次的的内容,必须设置成两个标签:
/// 如:姓名显示两次,则必须给两个位置都加上标签,以示区别
259 #endregion- object IsSave = true;
- doc.Close(ref IsSave, ref missing, ref missing);///关闭doc文档对象
- System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
- doc = null;
- object IsSave1 = false;
- app.Quit(ref IsSave1, ref missing, ref missing);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
- app = null;
- GC.Collect();
- return downFile;
- }
- else
- {
- return "";
- }
- }
- catch (Exception ex)
- {
- app = null;
- GC.Collect();
- return "";
- }
- }
- ///
- /// <summary>
- /// 下载文件
- /// </summary>
- /// <param name="filename">文件名(全路径)</param>
- /// <param name="downname">文件下载名</param>
- protected void DownloadFile(string filename, string downname)
- {
- FileStream f;
- byte[] buffer = new byte[];
- try
- {
- f = new FileStream(filename, FileMode.Open);
- buffer = new byte[f.Length];
- f.Read(buffer, , buffer.Length);
- f.Close();
- }
- catch
- {
- ZWL.Common.MessageBox.Show(this, "文件不存在!");
- return;
- }
- filename = filename.Replace(@"/", @"\");
- //20121023wangyj
- string saveFileName = "";
- int intStart = filename.LastIndexOf("\\") + ;
- saveFileName = filename.Substring(intStart, filename.Length - intStart);
- Response.Clear();
- Response.Buffer = true;
- Response.Charset = "GB2312";
- string fileType = Path.GetExtension(filename).ToLower();
- switch (fileType)
- {
- case ".asf":
- System.Web.HttpContext.Current.Response.ContentType = "video/x-ms-asf";
- break;
- case ".jpg":
- case ".jpeg":
- System.Web.HttpContext.Current.Response.ContentType = "image/jpeg";
- break;
- case ".gif":
- System.Web.HttpContext.Current.Response.ContentType = "image/gif";
- break;
- case ".pdf":
- System.Web.HttpContext.Current.Response.ContentType = "application/pdf";
- break;
- case ".avi":
- System.Web.HttpContext.Current.Response.ContentType = "video/avi";
- break;
- case ".doc":
- System.Web.HttpContext.Current.Response.ContentType = "application/msword";
- break;
- case ".zip":
- System.Web.HttpContext.Current.Response.ContentType = "application/zip";
- break;
- case ".rar":
- System.Web.HttpContext.Current.Response.ContentType = "application/rar";
- break;
- case ".xls":
- System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
- break;
- case ".wav":
- System.Web.HttpContext.Current.Response.ContentType = "audio/wav";
- break;
- case ".mp3":
- System.Web.HttpContext.Current.Response.ContentType = "audio/mpeg3";
- break;
- case ".mpg":
- System.Web.HttpContext.Current.Response.ContentType = "audio/mpeg";
- break;
- case ".rtf":
- System.Web.HttpContext.Current.Response.ContentType = "application/rtf";
- break;
- case ".htm":
- case ".html":
- System.Web.HttpContext.Current.Response.ContentType = "text/html";
- break;
- case ".asp":
- System.Web.HttpContext.Current.Response.ContentType = "text/asp";
- break;
- default:
- System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
- break;
- }
- Response.HeaderEncoding = System.Text.Encoding.GetEncoding("GB2312");
- Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(downname));
- Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
- //Response.WriteFile(System.Configuration.ConfigurationSettings.AppSettings["TemplatePhysicalPath"].ToString() + pt.Path);
- Response.BinaryWrite(buffer);
- Response.GetHashCode();
- Response.End();
- }
C#实现按Word模板导出Word(加书签bookMark)的更多相关文章
- 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)
https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...
- .net core 使用NPOI填充Word模板导出Word
最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...
- java根据word模板导出word文件
1.word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量 2.将word文档另存为xml文件.编辑如下图,找到填写的占位,修改为${bcrxm}格式 3.将文件后缀名改为.ftl文 ...
- SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...
- C#通过模板导出Word(文字,表格,图片)
C#通过模板导出Word(文字,表格,图片) C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法, ...
- Net Core DocXCore 实现word模板导出
实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出. 实现以下几个需求: 1.表单导出 2.表格导出 3.表单表格混合导出 4.实际用例测试 解决方案: 实现 ...
- OpenXml Sdk 根据Word模板导出到word
一:OpenXml Sdk 简介 Open XML标准的简单介绍:Ecma Office Open XML(“Open XML”)是针对字处理文档.演示文稿和电子表格的国际化开放标准,可免费供多个应用 ...
- JSP利用freemarker生成基于word模板的word文档
利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...
- 使用Spire.Doc组件利用模板导出Word文档
以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作, ...
随机推荐
- DirectUI实现原理
一,概念 传统的Windows窗口程序对每一个控件都会创建一个句柄,而DUI技术奖所有控件都绘制在一个窗体上,这些控件的逻辑和绘图方式必须自己进行编写和封装,所以这些控件都是无句柄的. DUI技术的实 ...
- IRC配置for open source community
IRC是开源社区进行交流使用的一个很重要的工具. 但是很多公司有限制,不让在办公电脑上, 安装IRC的客户端. ZNC + weechat 是一个可以替代的 选择. irccloude 也是一个可替代 ...
- hdu1728逃离迷宫 (利用最短路径思想+优先队列(BFS))
Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...
- mysql中多个字段共同确定唯一性
create table tbl_table ( id integer not null auto_increment, fname varchar(255), lname varchar(255), ...
- poj - 4045 - Power Station
题意:一棵有n个结点的树,要取其中的一个结点,使得该结点到其他所有结点的距离和dis最小,即损耗I * I * R * dis最小,输出最小损耗和该结点(有多个的话按结点编号从小到大输出)(3 < ...
- [置顶] 有关ListIterator接口的add与remove方法探究
ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...
- uva 10051 Tower of Cubes(DAG最长路)
题目连接:10051 - Tower of Cubes 题目大意:有n个正方体,从序号1~n, 对应的每个立方体的6个面分别有它的颜色(用数字给出),现在想要将立方体堆成塔,并且上面的立方体的序号要小 ...
- java 解析json的问题
本文转载自http://chriszz.sinaapp.com/?p=392 Json就是Javascript notation,可以替代XML,用做数据交互. Json的两种基本表示形式,可以用自动 ...
- IsPostBack是什么意思,如何运用?
IsPostBack是Page类的一个属性,返回值为一个布尔值.一般放在Page_Load事件中.当页面是第一次打开时其值为False,若当前页面为一个提交后的页面其值为True. if (!IsPo ...
- 在PreparedStatement中设置空值
在PreparedStatement中设置空值 分类: Work& Study java2009-09-10 09:56 922人阅读 评论(0) 收藏 举报 nulltypes数据库 ...