首先 我的思路是给定一个和页面一样模板 然后将模板里需要填写的地方填写为一样的符号 如:XX,然后保存word为xml格式。加进项目里面来,然后通过获取xml节点,并给它赋值。
前台代码:
$.ajax({
type: "post",
url: "WeekWorkSummary.ashx",
data: "strXX=" + str,
success: function (msg) {
if (msg == "e") {
alert("导出失败,请检查填写信息是否正确,尽量不要输入“^”敏感字符。");
}
else {
window.location.href = 'UploadFiles/模板.doc';//成功之后下载文件
}
},
error: function () {
alert("导出失败,请检查填写信息是否正确,尽量不要输入“^”敏感字符。");
}
});
后台代码:
string str = "";//传来的数据 string xmlName = "";//xml名称 xmlName = "Xml/wordM.xml"; str = context.Request.Params["strRpt"]; XDocument xml = XDocument.Load(context.Server.MapPath(xmlName));//找到所在路径 //找到"w:tbl"名称的节点(对应WORD中的表格),w是名称空间 XNamespace nameSpace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; //获取要替换的位置 var query = from x in xml.Descendants(nameSpace + "t") where x.Value == "XX" select x; //判断接收的字符串是否符合要求。 if (str.Split('^').Length == 4 || str.Split('^').Count() == 110) { //遍历数据并插入表格 int i = 0; foreach (var a in query) { a.Value = str.Split('^')[i]; i++; }
//保存到word try { context.Response.Write(""); xml.Save(context.Server.MapPath("UploadFiles/模板.doc")); } catch (Exception ex) { //提示重试 context.Response.Write("w"); } finally { context.Response.End(); }
不要忘记引用命名空间 using System.Xml.Linq;
也必须是 office word,wps不行。