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


         在初始化WordHelper时,要获取模板的相对路径。获取文档的相对路径多个地方要用到,比如批量导出时要先保存文件到指定路径下,再压缩打包下载,所以专门写了个关于获取文档的相对路径的类。 

     1  #region 获取文档的相对路径
     2     public class WordFilePath
     3     {
     4         #region 返回文件带路径值
     5         /// <summary>
     6         /// 返回文件带路径值
     7         /// </summary>
     8         /// <param name="FilePth">文件所在文件夹名称</param>
     9         /// <param name="FileName">文件名</param>
    10         /// <returns></returns>
    11         public static string FileWithFilePath(string FilePth, string FileName = null)
    12         {
    13             string strFile = "";
    14             if (!string.IsNullOrEmpty(FilePth))
    15                 strFile += "~/" + FilePth + "/";
    16             if (!string.IsNullOrEmpty(FileName))
    17                 strFile += FileName;
    18 
    19             return strFile;
    20         }
    21         #endregion
    22 
    23         #region 判断文件或文件夹是否存在
    24         /// <summary>
    25         /// 判断文件或文件夹是否存在
    26         /// </summary>
    27         /// <param name="FilePth">文件所在文件夹名称</param>
    28         /// <param name="FileName">文件名</param>
    29         /// <returns></returns>
    30         public static bool ExistFile(string FilePth, string FileName = null)
    31         {
    32             return System.IO.File.Exists(GetFilePath(FilePth, FileName));
    33         }
    34         #endregion
    35 
    36         #region 获取文件及文件夹的相对路径
    37         /// <summary>
    38         /// 获取文件及文件夹的相对路径
    39         /// </summary>
    40         /// <param name="FilePth"></param>
    41         /// <param name="FileName"></param>
    42         /// <returns></returns>
    43         public static string GetFilePath(string FilePth, string FileName = null)
    44         {
    45             string strPath = "";
    46             strPath = FileWithFilePath(FilePth, FileName);
    47             strPath = HttpContext.Current.Request.MapPath(strPath);
    48             return strPath;
    49         }
    50         #endregion
    51     }
    52     #endregion 
    View Code

         以上方法可以实现了单个word文档带图片的导出功能了,多个文档的生成也可以实现,只是还没有打包下载的代码。
         最后调用的方法如下,要先判断模板是否存在:    

     1  string strpath = "Content/templates"; //模板所在的文件文件夹
     2                 string templateFile = "实习生学习记录表导出模板.doc";
     3                 if (WordFilePath.ExistFile(strpath, templateFile))
     4                 {
     5                     string saveName = WordHelper.SaveDocName(form["NTName"], form["CardNo"]);  //保存的名称
     6                     saveName = HttpUtility.UrlEncode(saveName, Encoding.GetEncoding("utf-8"));
     7                     WordHelper wordhelper = new WordHelper(templateFile);
     8                     getWordInfo(wordhelper, templateFile, NTID, stype.ToString(), majorid.ToString(), sequence.ToString());
     9                     return base.File(wordhelper.ExportDoc().ToArray(), "application/msword", saveName);
    10                 }
    11                 else
    12                 {
    13                     return ShowRedirectMessage("导出的模板不存在!", strUrl);
    14                 } 
    View Code

        getWordInfo方法是为将所需的信息拼凑成一个word文档,减少代码的重复性而提取出来的,如:

     1 #region 将所有信息拼凑成一个word文档
     2         public void getWordInfo(WordHelper wordhelper, string tempFile, string ntid, string stype, string mid, string sequence)
     3         {
     4             if (tempFile.Contains("实习生学习记录表导出模板"))
     5             {
     6                 Dictionary<string, string> dicWhere = new Dictionary<string, string>();
     7                 dicWhere.Add("NTID", ntid);
     8                 wordhelper.GetBasicInfo(typeof(BLL.NewTraineeInfo), dicWhere);
     9                 PrejobTrainWord(wordhelper, ntid);
    10                 TrainListWord(wordhelper, ntid, stype, mid);
    11                 AwardListWord(wordhelper, ntid, stype, mid);
    12                 ArrangeListWord(wordhelper, ntid, stype);
    13                 ScoreListWord(wordhelper, ntid, stype, mid, sequence);
    14                 EvalWord(wordhelper, ntid, stype, mid);
    15             }
    16       } 
    17 
    18        #region 其他信息
    19         //岗前培训
    20         public void PrejobTrainWord(WordHelper wordhelper, string ntid)
    21         {
    22             Dictionary<string, string> dicWhere = new Dictionary<string, string>();
    23             dicWhere.Add("NTID", ntid);
    24             wordhelper.GetBasicInfo(typeof(BLL.PrejobTraining), dicWhere);
    25         }
    26 
    27         //轮科安排表
    28         public void ArrangeListWord(WordHelper wordhelper, string ntid, string stype)
    29         {
    30             Dictionary<string, string> dicWhere = new Dictionary<string, string>();
    31             dicWhere = new Dictionary<string, string>();
    32             dicWhere.Add("NTID", ntid);
    33             dicWhere.Add("StudentType", stype.ToString());
    34             wordhelper.GetTableList(typeof(BLL.MajorCycle), dicWhere, "ArrangeList");
    35         } 
    View Code
        ArrangeList是之前在word模板里所设定的如下图,用for循环出列表,
    图片

         getWordInfo里其它的方法类似这两个。    

         最后导出的word文档大致如下图所示:              

    图片
    图片
  • 相关阅读:
    小米2系列板砖自救行动
    大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等
    SQLServer 2016安装时的错误:Polybase要求安装Oracle JRE 7更新51或更高版本
    异步方法不能使用ref和out的解决方法
    大公司都有哪些开源项目~~~简化版
    08.LoT.UI 前后台通用框架分解系列之——多样的Tag选择器
    07.LoT.UI 前后台通用框架分解系列之——强大的文本编辑器
    BIOS中未启用虚拟化支持系列~~例如:因此无法安装Hyper-V
    【开源】1句代码搞定图片批量上传,无需什么代码功底【无语言界限】
    06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传
  • 原文地址:https://www.cnblogs.com/jingshuisihan/p/4604294.html
Copyright © 2020-2023  润新知