zoukankan      html  css  js  c++  java
  • 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 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方法

      

     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格式的方法

      

     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, @"([
    ])[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("
    ", "");
    27                 Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();
    28             }
    29             return Htmlstring;
    30         }
    View Code

      

  • 相关阅读:
    BroadcastReceiver总结
    一二三(The Seventh Hunan Collegiate Programming Contest)
    使用 JQueryMobile 点击超链接提示“error loading page” 错误
    盒子游戏(The Seventh Hunan Collegiate Programming Contest)
    遗留系统升级改造方案思路
    根据外接鼠标控制笔记本触摸板禁用或启用
    设计模式之策略模式
    android4.3环境搭建
    清晰明亮的白色lua协程(coroutine)
    基于JUnit和Ant测试程序正在运行使用Kieker(AspectJ)监测方法
  • 原文地址:https://www.cnblogs.com/ANLOG/p/4210503.html
Copyright © 2011-2022 走看看