使用ICSharpCode.SharpZipLib+Aspose模板批量导出Word

由于是Web端的项目,所以点击按钮之后直接从Aspose模板读取数据,然后在内存中操作,而不是下载到本地后再打包弄到内存中下载。废话不多说,直接上代码

 1      public ActionResult ExportZip(int testid)
 2         {
 3             string strSavePath = Server.MapPath("~/WordTemplate/PersonalityTest.zip");
 4             //获取数据,用户可以根据自己的需求重新定义
 5             var Tester = testerBll.GetAllList();
 6             string zipFileName = "人力资源性格测试.zip";
 7             MemoryStream ms = new MemoryStream();
 8             byte[] buffer = null;
 9             var filePath = string.Empty;
10             using (ZipFile file = ZipFile.Create(ms))
11             {
12                 file.BeginUpdate();
13                 //此处的循环用户可以根据自己的需求自己定义
14                 foreach (var t in Tester)
15                 {
16                     var data = new Dictionary<string, int>();
17                     #region 生成word文件并填充数据
18                     string templatePath = Server.MapPath("~/WordTemplate/Test.doc");
19                     var doc = new Document(templatePath); // 载入模板
20
21                     // 填充数据
22                     doc.Range.Bookmarks["A"].Text = data.ContainsKey("A") ? data["A"].ToString() : string.Empty;
23                     doc.Range.Bookmarks["B"].Text = data.ContainsKey("B") ? data["B"].ToString() : string.Empty;
24                     doc.Range.Bookmarks["C"].Text = data.ContainsKey("C") ? data["C"].ToString() : string.Empty;
25                     doc.Range.Bookmarks["D"].Text = data.ContainsKey("D") ? data["D"].ToString() : string.Empty;
26                     doc.Range.Bookmarks["E"].Text = data.ContainsKey("E") ? data["E"].ToString() : string.Empty;
27                     doc.Range.Bookmarks["F"].Text = data.ContainsKey("F") ? data["F"].ToString() : string.Empty;
28                     doc.Range.Bookmarks["G"].Text = data.ContainsKey("G") ? data["G"].ToString() : string.Empty;
29                     doc.Range.Bookmarks["H"].Text = data.ContainsKey("H") ? data["H"].ToString() : string.Empty;
30                     doc.Range.Bookmarks["I"].Text = data.ContainsKey("I") ? data["I"].ToString() : string.Empty;
31                     doc.Range.Bookmarks["count"].Text = count.ToString();
32                     doc.Range.Bookmarks["name"].Text = tester.name;
33                     doc.Range.Bookmarks["tel"].Text = tester.tel;
34                     //doc.Range.Bookmarks["result"].Text = result.Caption.Replace("<br/>", string.Empty); // 剔除 <br/> 换行符号
35                     doc.Range.Bookmarks["result"].Text = string.IsNullOrEmpty(result.Caption) ? string.Empty : result.Caption.Replace("<br/>", string.Empty); // 剔除 <br/> 换行符号
36                     #endregion
37                     // 受测人姓名.doc
38                     var fileName = string.Format("{0}.doc", t.name);
39                     using (MemoryStream stream = new MemoryStream())
40                     {
41                         doc.Save(stream, SaveFormat.Doc);
42                         StringDataSource ds = new StringDataSource(stream);
43                         file.Add(ds, fileName);
44                     }
45
46                 }
47                 file.CommitUpdate();
48                 buffer = new byte[ms.Length];
49                 ms.Position = 0;
50                 ms.Read(buffer, 0, buffer.Length);   //读取文件内容(1次读ms.Length/1024M)
51                 ms.Flush();
52                 ms.Close();
53             }
54             Response.Clear();
55             Response.Buffer = true;
56             Response.ContentType = "application/x-zip-compressed";
57             Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(zipFileName));
58             Response.BinaryWrite(buffer);
59             Response.Flush();
60             Response.End();
61
62             return View();
63         }

还有一个实现了IStaticDataSource接口的内部类

 1     class StringDataSource : IStaticDataSource
 2     {
 3         public byte[] bytes { get; set; }
 4         public StringDataSource(MemoryStream ms)
 5         {
 6             bytes = ms.GetBuffer();
 7         }
 8
 9         public Stream GetSource()
10         {
11             Stream s = new MemoryStream(bytes);
12             return s;
13         }
14     }

为了防止生成的压缩文件乱码,可以在using之上加上这两句代码

1 Encoding gbk = Encoding.GetEncoding("gbk");
2 ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage;
时间: 2024-12-26 06:21:55

使用ICSharpCode.SharpZipLib+Aspose模板批量导出Word的相关文章

C# 导出word文档及批量导出word文档(1)

这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量导出word文档的,通过把文件打包成压缩包,以文件流的方式输出下载.aspose.word.dll最好使用最新版的,14.5或者更高,我使用的是14.5版本,页面是采用mvc的语法.在这里感谢赵某人为我提供的帮助.         首先制作好word模板,使用模板可以避免在代码中对word进行排版,方便简单.

Asp.net通过模板(.dot)导出Word

需要引用Office的DLL,在附件中 贴上核心代码(转载): Microsoft.Office.Interop.Word._Application appWord = new Microsoft.Office.Interop.Word.ApplicationClass(); Microsoft.Office.Interop.Word._Document docFile = null; try { appWord.Visible = false; object objTrue = true; o

C#第三方Aspose.Words.dll导出Word(书签模板)方式说明

项目有遇到需要导出Word,在别人写好的基础上去修改样式,导出后发现样式不正确不整齐,于是采用模板的方式重新导出 1.模板word文件的制作,本人用office2013,在设计好需要的整个表格之后,在你需要替换的位置"插入"--书签 并命名,此命名需要在程序中进行替换 将做好的模板word文件放在程序目录下 2.引用Aspose.Words.dll 3.新建类WordOpAp.cs 1 public class WordOpAp 2 { 3 4 static public object

C# 导出word文档及批量导出word文档(2)

aspose.word主要是通过把读取出来的数据放到datatable里,在datable里做相应的格式的调整,再导出到word文档里.mvc和webform最后导出的语句略有不同,在mvc的controller,用的是base.File,对应的是FileContentResult,在webform里用的是Response.写法分别为: //在WebForm中,保存文档到流中,使用Response. BinaryWrite输出该文件 var docStream = new MemoryStrea

C# 导出word文档及批量导出word文档(3)

在初始化WordHelper时,要获取模板的相对路径.获取文档的相对路径多个地方要用到,比如批量导出时要先保存文件到指定路径下,再压缩打包下载,所以专门写了个关于获取文档的相对路径的类. 1 #region 获取文档的相对路径 2 public class WordFilePath 3 { 4 #region 返回文件带路径值 5 /// <summary> 6 /// 返回文件带路径值 7 /// </summary> 8 /// <param name="Fil

利用Aspose.Words.dll导出Word代替NPOI

许久没来写博客了,已至于登录博客园的密码都忘却了. 时间过的真快,最近再做一个招聘管理系统,其中用到了导出Word文档的功能,尝试了各种方法,遇到了各种问题.不过最后还是解决了导出Word的问题. 一.针对导出Word文档的功能,采用的几个方案: 1.预置好Word文档模板,采用加载替换文档内容标签的方式实现.    采用这种方案可以借助两个第三方组件来实现,分别如下: (1).借助Microsoft.Office.Interop.Word组件实现.  (2).借助NPOI实现.  (3).借助

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex

使用Spire.Doc组件利用模板导出Word文档

以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作,有NPOI,Spire等第三方组件.开始考虑的是NPOI,毕竟它在操作Excel方面还是很强大的:但是不知道是它本身没有,还是我没找到,无法实现利用Word模板的标签插入内容,纯靠代码去生成Word文档,排版是个大问题.最终找到了Spire.Doc组件,轻松实现! Spire的官网地址:https:

批量导出access某表内容到word文档

一.需求: 需要将表中每一条记录中的某些内容导出在一个word文档中,并将这些文档保存在指定文件夹目录下 二.界面,简单设计如下: 三.添加office相关引用 添加后可在解决方案资源管理器中看到: 四.添加form1中的引用 using System.Data.OleDb;using System.Data.SqlClient;using System.IO;using Microsoft.Office.Core;using Word=Microsoft.Office.Interop.Word