<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
C# 导出word 和中文乱码
最新推荐文章于 2022-03-30 17:37:43 发布