你的位置:首页 > ASP.net教程

[ASP.net教程]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     #endregion22 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     #endregion35 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     #endregion51   }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         else12         {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文档大致如下图所示:              

图片

 

图片