利用html模板生成Word文件(服务器端不需要安装Word)
利用html模板生成Word文件(服务器端不需要安装Word)
由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端的方法来实现,经过测试这种方法也是一种不错的选择!
首先自己写一个html网页模板,代码如下:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>投注站申请表</title> <style type="text/css"> table { border-collapse: collapse; } table tr td { border: 1px solid black; font-size:17px; } </style> </head> <body> <table cellpadding="1" cellspacing="1" style="margin:10px auto;"> <tr> <td colspan="4" style="font-weight:bold;text-align:center;"> 投注站申请表 </td> </tr> <tr> <td style="width:80px;"> 申请人 </td> <td style="width:220px;"> {ProposerName} </td> <td style="width:150px;"> 电话号码 </td> <td style="width:130px;"> {PhoneNo} </td> </tr> <tr> <td style="width:80px;"> 申请地址 </td> <td style="width:220px;"> {ProposerAddress} </td> <td style="width:150px;"> 申请房屋面积 </td> <td style="width:130px;"> {HouseArea} </td> </tr> <tr> <td style="width:80px;"> 房屋类型 </td> <td style="width:220px;"> {HouseType} </td> <td style="width:150px;"> 房屋性质 </td> <td style="width:130px;"> {HouseNature} </td> </tr> <tr> <td style="width:80px;"> 申请日期 </td> <td colspan="3"> {ApplyDate} </td> </tr> </table> </body> </html>
后台读取该模板并替换返回给客户端即可,代码如下:
#region 根据申请单ID号和模板生成word下载文件 public void DownLoadWord(string id) { if (string.IsNullOrEmpty(id)) { id = "0"; } string sql = "SELECT ID,ProposerName,PhoneNo,ProposerAddress,HouseArea,HouseType,HouseNature,ApplyDate" + " from BettingStationApply where ID=@id "; SqlParameter[] parm = new SqlParameter[] { new SqlParameter("@id", int.Parse(id)) }; //根据ID号取得当前申请单的详细信息 DataTable dt = DBHelper.GetDataSet(sql, parm); if (dt.Rows.Count > 0) { DataRow dr = dt.Rows[0]; try { //模板路径 string tempName = Server.MapPath(@"/BettingStation/ApplyTemplete.html"); string fileContent=File.ReadAllText(tempName, Encoding.UTF8); //替换html模板中相关内容 if (dr["ProposerName"] != DBNull.Value) { fileContent=fileContent.Replace("{ProposerName}", dr["ProposerName"].ToString()); } else { fileContent = fileContent.Replace("{ProposerName}", ""); } if (dr["PhoneNo"] != DBNull.Value) { fileContent = fileContent.Replace("{PhoneNo}", dr["PhoneNo"].ToString()); } else { fileContent = fileContent.Replace("{PhoneNo}", ""); } if (dr["ProposerAddress"] != DBNull.Value) { fileContent = fileContent.Replace("{ProposerAddress}", dr["ProposerAddress"].ToString()); } else { fileContent = fileContent.Replace("{ProposerAddress}", ""); } if (dr["HouseArea"] != DBNull.Value) { fileContent = fileContent.Replace("{HouseArea}", dr["HouseArea"].ToString()); } else { fileContent = fileContent.Replace("{HouseArea}", ""); } if (dr["HouseType"] != DBNull.Value) { fileContent = fileContent.Replace("{HouseType}", dr["HouseType"].ToString()); } else { fileContent = fileContent.Replace("{HouseType}", ""); } if (dr["HouseNature"] != DBNull.Value) { fileContent = fileContent.Replace("{HouseNature}", dr["HouseNature"].ToString()); } else { fileContent = fileContent.Replace("{HouseNature}", ""); } if (dr["ApplyDate"] != DBNull.Value) { fileContent = fileContent.Replace("{ApplyDate}", Convert.ToDateTime(dr["ApplyDate"].ToString()).ToString("yyyy-MM-dd HH:mm:ss")); } else { fileContent = fileContent.Replace("{ApplyDate}", ""); } //替换掉换行 fileContent = fileContent.Replace("\r", "").Replace("\n","").Replace("^p","") ; //文件名字 string fileName = dr["ProposerName"].ToString() + "_投注站申请表.doc"; HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Charset = "GB2312"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); // 指定返回的是一个不能被客户端读取的流,必须被下载 HttpContext.Current.Response.ContentType = "application/ms-word"; // 把文件流发送到客户端 HttpContext.Current.Response.Write(fileContent); // 停止页面的执行 HttpContext.Current.Response.End(); } catch (Exception ex) { //writeLog.WriteErrorLog("根据模板生成Word文件出错!错误信息:" + ex.Message); //Message.show("根据模板生成Word文件出错!错误信息:" + ex.Message); } } else { //writeLog.WriteErrorLog("id=" + id + "没有查找到任何数据!"); //Message.show("id=" + id + "没有查找到任何数据!"); } } #endregion
到此,根据模板导出Word功能就完成了,该方法不需要服务器端安装Office组件,即可实现Word或者Excel的相关导出功能。