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

项目有遇到需要导出Word,在别人写好的基础上去修改样式,导出后发现样式不正确不整齐,于是采用模板的方式重新导出

 

1.模板word文件的制作,本人用office2013,在设计好需要的整个表格之后,在你需要替换的位置"插入"--书签 并命名,此命名需要在程序中进行替换

将做好的模板word文件放在程序目录下

2.引用Aspose.Words.dll

3.新建类WordOpAp.cs

C#第三方Aspose.Words.dll导出Word(书签模板)方式说明
  1  public class WordOpAp
  2     {
  3 
  4         static public object syncseed = new object();
  5 
  6         /// <summary>
  7         /// 导出Word
  8         /// </summary>
  9         private Document WordDoc;
 10         private bool isOpened = false;//判断word模版是否被占用
 11         public void SaveAs(string strFileName, bool isReplace)
 12         {
 13             if (isReplace && File.Exists(strFileName))
 14             {
 15                 File.Delete(strFileName);
 16             }
 17             WordDoc.Save(strFileName);
 18         }
 19 
 20         //基于模版新建Word文件
 21         public void OpenTempelte(string strTemppath)
 22         {
 23             WordDoc = new Document(strTemppath);
 24 
 25         }
 26         public void FillLable(string LabelId, string Content)
 27         {
 28 
 29             //打开Word模版
 30             object bkmC = LabelId;
 31             if (WordDoc.Range.Bookmarks[LabelId] != null)
 32             {
 33                 WordDoc.Range.Bookmarks[LabelId].Text = Content;
 34             }
 35         }
 36         public void ResponseOut(string filename)
 37         {
 38             WordDoc.Save(System.Web.HttpContext.Current.Response, filename, ContentDisposition.Attachment, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
 39         }
 40 
 41         public void OpenWebInline(string filename)
 42         {
 43 
 44             WordDoc.Save(System.Web.HttpContext.Current.Response, filename, ContentDisposition.Inline, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
 45         }
 46 
 47         /// <summary>
 48         /// 设置打开密码
 49         /// </summary>
 50         /// <param name="pwd"></param>
 51         public void SetPassword(string pwd)
 52         {
 53             WordDoc.Protect(ProtectionType.ReadOnly, pwd);
 54         }
 55 
 56         /// <summary>
 57         /// 不可编辑受保护,需输入密码
 58         /// </summary>
 59         /// <param name="Password"></param>
 60         public void NoEdit(string Password)
 61         {
 62             WordDoc.Protect(ProtectionType.ReadOnly, Password);
 63         }
 64 
 65         public void ExportWord(string fileName, string wordname)
 66         {
 67             //输出word
 68             System.IO.FileInfo file = new System.IO.FileInfo(fileName);
 69             System.Web.HttpContext.Current.Response.Clear();
 70             System.Web.HttpContext.Current.Response.Charset = "GB2312";
 71             System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
 72             // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 
 73             System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(wordname, System.Text.Encoding.UTF8));
 74             // 添加头信息,指定文件大小,让浏览器能够显示下载进度 
 75             System.Web.HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
 76             // 指定返回的是一个不能被客户端读取的流,必须被下载 
 77             System.Web.HttpContext.Current.Response.ContentType = "application/ms-word";
 78             // 把文件流发送到客户端 
 79             System.Web.HttpContext.Current.Response.WriteFile(file.FullName);
 80             // 停止页面的执行 
 81             System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
 82 
 83         }
 84 
 85         public void ChangWordStyle(string markName, string content)
 86         {
 87             DocumentBuilder builder = new DocumentBuilder(this.WordDoc);
 88             builder.MoveToBookmark(markName);
 89             char[] chs = content.ToCharArray();
 90             int index = 0;
 91             while (true)
 92             {
 93                 if (index >= content.Length)
 94                 {
 95                     break;
 96                 }
 97                 if (chs[index] == <)
 98                 {
 99                     if (content.Length > index + 3 && content.Substring(index + 1, 2).ToUpper() == "/P")
100                     {
101                         builder.Writeln();
102                     }
103                     else if (content.Length > index + 7 && content.Substring(index + 1, 6).ToUpper() == "STRONG")
104                     {
105                         builder.Font.Bold = true;
106                     }
107                     else if (content.Length > index + 8 && content.Substring(index + 1, 7).ToUpper() == "/STRONG")
108                     {
109                         builder.Font.Bold = false;
110                     }
111                     else if (content.Length > index + 5 && content.Substring(index + 1, 4).ToUpper() == "BR /")
112                     {
113                         builder.Writeln();
114                     }
115                     else if (content.Length > index + 3 && content.Substring(index + 1, 2).ToUpper() == "BR")
116                     {
117                         builder.Writeln();
118                     }
119                     index = content.IndexOf(">", index) + 1;
120 
121                 }
122                 else
123                 {
124                     if (content.IndexOf("<", index) == -1)
125                     {
126                         string text = content.Substring(index);
127                         builder.Write(HttpUtility.HtmlDecode(text));
128                         index += text.Length;
129                     }
130                     else
131                     {
132                         string text = content.Substring(index, content.IndexOf("<", index) - index);
133                         builder.Write(HttpUtility.HtmlDecode(text));
134                         index += text.Length;
135                     }
136                 }
137             }
138 
139         }
140 
141     }
WordOpAp


4.导出word方法

  

C#第三方Aspose.Words.dll导出Word(书签模板)方式说明
 1  try
 2             {
 3 
 4                 string path = Server.MapPath("../Generate/ExcelModel/"); //目录地址
 5                 string templatePath = path + "zxprint.doc";  //自己做好的word
 6                 wop.OpenTempelte(templatePath); //打开模板文件
 7                 //以下为添加内容到Word
 8                 ProjectSubmmit obj = (ProjectSubmmit)Session["ProjectSubmmit"];//此行是自己的实体层,用于获取数据
 9                
10                 string FileName = "";
11                 if (obj != null)
12                 {
13                     FileName = string.Format("{0}.doc", obj.ProjectNo); 
14                     wop.FillLable("ProjectNo", obj.ProjectNo); //替换word中指定书签的位置
15                     wop.FillLable("GroupNo", obj.Party_Index);
16                     wop.FillLable("CreateTime", obj.MeetingTime.ToString("yyyy年M月d日"));
17                     wop.ChangWordStyle("Description", obj.Description); //改变内容的格式,
18                 }
19                 wop.ResponseOut(FileName); //传入的是导出文档的文件名,导出文件
20             }
21             catch
22             {
23 
24             }
View Code


5.附上一段清除html格式的方法

  

C#第三方Aspose.Words.dll导出Word(书签模板)方式说明
 1    public static string NoHTML(string Htmlstring)
 2         {
 3             if (Htmlstring.Length > 0)
 4             {
 5                 //删除脚本
 6                 Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
 7                 //删除HTML
 8                 Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
 9                 Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
10                 Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
11                 Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);
12                 Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
13                 Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
14                 Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
15                 Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
16                 Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
17                 Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
18                 Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
19                 Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
20                 Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
21                 Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);
22                 Htmlstring = Regex.Replace(Htmlstring, @"&ldquo;", "\"", RegexOptions.IgnoreCase);//保留【 “ 】的标点符合
23                 Htmlstring = Regex.Replace(Htmlstring, @"&rdquo;", "\"", RegexOptions.IgnoreCase);//保留【 ” 】的标点符合
24                 Htmlstring.Replace("<", "");
25                 Htmlstring.Replace(">", "");
26                 Htmlstring.Replace("\r\n", "");
27                 Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();
28             }
29             return Htmlstring;
30         }
View Code

 

  

 

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

上一篇:浅谈自动化测试框架开发


下一篇:Android多线程的四种方式