<pre name="code" class="csharp"><pre name="code" class="csharp"> protected void btnWord_Click(object sender, EventArgs e) { string strSql = "SELECT语句filename"; string filename = this.Sql.GetString(strSql) + DateTime.Now.ToString("yyyyMMdd"); strSql = "SELECT 主循环"; DataTable dt = GetDataTable(strSql); if (dt.Rows.Count == 0 || dt == null) { this.MsgBox("读取数据失败!"); return; } //这块就像html里面类似 Response.ContentType = "application/msword"; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AppendHeader("Content-Disposition", "attachment;filename=" + ToHexString(filename) + ".doc");//ToHexString(filename)防止中文乱码 StringBuilder sb = new StringBuilder(); for (int i = 0; i < dt.Rows.Count; i++) { strSql = "SELECT 子循环"; DataTable dtview = this.Sql.GetDataTable(strSql); if (dtview.Rows.Count > 0) { sb.Append("<table><tr><td colspan='3' width='1000' align='center'>Tilte公司</td><tr>"); sb.Append("<tr><td colspan='3' width='1000' align='center'>Title标题</td></tr>"); sb.AppendFormat("<tr><td width='300' align='left'>作业:{0}</td><td width='400' align='center'>单位:{1}</td><td width='300' align='right'>编号:{2}</td></tr>", dt.Rows[i]["列名"].ToString(), dt.Rows[i]["列名"].ToString(), dt.Rows[i]["列名"].ToString()); sb.AppendFormat("<tr><td align='left'>日 期:{0}</td><td></td><td align='right'>期间:{1}</td></tr></table>", DateTime.Parse(dtview.Rows[0]["列名"].ToString()).ToString("yyyy-MM-dd"), dt.Rows[i]["列名"].ToString()); sb.Append("<table border='1'><tr><th rowspan='2' width='420'>重 点</th><th colspan='3' width='160'>标 准</th><th rowspan='2' width='420'>结果<th></tr><tr><th>是</th><th>否</th><th>不适用</th></tr>"); for (int j = 0; j < dtview.Rows.Count; j++) { sb.AppendFormat("<tr><td width='420'>{0}</td>", (j + 1).ToString() + "." + dtview.Rows[j]["列名"].ToString()); switch (int.Parse(dtview.Rows[j]["lngrule"].ToString())) { case 1: sb.AppendFormat("<td>{0}</td><td></td><td></td>", "√"); break; case 2: sb.AppendFormat("<td></td><td>{0}</td><td></td>", "√"); break; case 3: sb.AppendFormat("<td></td><td></td><td>{0}</td>", "√"); break; } sb.AppendFormat("<td width='420'>{0}</td>", dtview.Rows[j]["列名"].ToString()); sb.Append("</tr>"); } sb.Append("</table>"); sb.Append("<table><tr><td colspan='5' height='25'></td><td colspan='5'></td><td colspan='5' height='25'></td></tr></table>"); } } Response.Write(sb.ToString()); Response.End(); } #region 保存word中文名称乱码 /// <summary> /// 为字符串中的非英文字符编码 /// </summary> /// <param name="s"></param> /// <returns></returns> public string ToHexString(string s) { char[] chars = s.ToCharArray(); StringBuilder builder = new StringBuilder(); for (int index = 0; index < chars.Length; index++) { bool needToEncode = NeedToEncode(chars[index]); if (needToEncode) { string encodedString = ToHexString(chars[index]); builder.Append(encodedString); } else { builder.Append(chars[index]); } } return builder.ToString(); } /// <summary> ///指定 一个字符是否应该被编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private bool NeedToEncode(char chr) { string reservedChars = "$-_.+!*'(),@=&"; if (chr > 127) return true; if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0) return false; return true; } /// <summary> /// 为非英文字符串编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private string ToHexString(char chr) { UTF8Encoding utf8 = new UTF8Encoding(); byte[] encodedBytes = utf8.GetBytes(chr.ToString()); StringBuilder builder = new StringBuilder(); for (int index = 0; index < encodedBytes.Length; index++) { builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16)); } return builder.ToString(); } #endregion