一种比较兼容的Excel报表导出方法
/// <summary>
/// 从DataSet导出Excel
/// </summary>
/// <param name="ds"></param>
/// <param name="headTexts"></param>
/// <param name="fields"></param>
/// <param name="styles">样式,如果要显示为字符串,可设置为vnd.ms-excel.numberformat:@</param>
/// <param name="cssNames"></param>
public void ExportDataSetToExcel(DataSet ds, string[] headTexts, string[] fields, string[] formats, string[] styles, string fileName)
{
// 检测参数
if (ds == null || ds.Tables.Count == 0)
{
Alert("数据源为空!");
return;
}
if (headTexts == null || fields == null || headTexts.Length != fields.Length || headTexts.Length > ds.Tables[0].Columns.Count)
{
Alert("参数与数据源不匹配!");
return;
}
if (formats != null)
{
if (formats.Length < headTexts.Length)
{
string[] tmp = formats;
formats = new string[headTexts.Length];
tmp.CopyTo(formats, 0);
tmp = null;
}
}
if (styles != null)
{
if (styles.Length < headTexts.Length)
{
string[] tmp = styles;
styles = new string[headTexts.Length];
tmp.CopyTo(styles, 0);
tmp = null;
}
}
if (Common.StringUtils.IsNullOrEmpty(fileName))
{
fileName = string.Format("excel{0:yyyyMMdd}.xls", DateTime.Now);
}
Response.Clear();
Response.Buffer = true;
Response.Charset = "UTF-8";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.ContentEncoding = System.Text.Encoding.Default;
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
Response.Write("<table cellspacing='0' rules='all' border='1' style='border-collapse:collapse;'>");
// 表头
Response.Write("<thead>");
foreach (string headText in headTexts)
{
Response.Write(string.Format("<th>{0}</th>", headText));
}
Response.Write("</thead>");
foreach (DataRow row in ds.Tables[0].Rows)
{
Response.Write("<tr>");
for (int i = 0; i < headTexts.Length; ++i)
{
Response.Write("<td");
if (styles != null && Common.StringUtils.IsNullOrEmpty(styles[i]) == false)
{
Response.Write(string.Format(" style=\"{0}\"", styles[i]));
}
Response.Write(">");
if (formats != null && Common.StringUtils.IsNullOrEmpty(formats[i]) == false)
{
Response.Write(string.Format(formats[i], row[fields[i]]));
}
else
{
Response.Write(row[fields[i]]);
}
Response.Write("</td>");
}
Response.Write("</tr>");
}
Response.Write("</table>");
Response.End();
}
/// 从DataSet导出Excel
/// </summary>
/// <param name="ds"></param>
/// <param name="headTexts"></param>
/// <param name="fields"></param>
/// <param name="styles">样式,如果要显示为字符串,可设置为vnd.ms-excel.numberformat:@</param>
/// <param name="cssNames"></param>
public void ExportDataSetToExcel(DataSet ds, string[] headTexts, string[] fields, string[] formats, string[] styles, string fileName)
{
// 检测参数
if (ds == null || ds.Tables.Count == 0)
{
Alert("数据源为空!");
return;
}
if (headTexts == null || fields == null || headTexts.Length != fields.Length || headTexts.Length > ds.Tables[0].Columns.Count)
{
Alert("参数与数据源不匹配!");
return;
}
if (formats != null)
{
if (formats.Length < headTexts.Length)
{
string[] tmp = formats;
formats = new string[headTexts.Length];
tmp.CopyTo(formats, 0);
tmp = null;
}
}
if (styles != null)
{
if (styles.Length < headTexts.Length)
{
string[] tmp = styles;
styles = new string[headTexts.Length];
tmp.CopyTo(styles, 0);
tmp = null;
}
}
if (Common.StringUtils.IsNullOrEmpty(fileName))
{
fileName = string.Format("excel{0:yyyyMMdd}.xls", DateTime.Now);
}
Response.Clear();
Response.Buffer = true;
Response.Charset = "UTF-8";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.ContentEncoding = System.Text.Encoding.Default;
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
Response.Write("<table cellspacing='0' rules='all' border='1' style='border-collapse:collapse;'>");
// 表头
Response.Write("<thead>");
foreach (string headText in headTexts)
{
Response.Write(string.Format("<th>{0}</th>", headText));
}
Response.Write("</thead>");
foreach (DataRow row in ds.Tables[0].Rows)
{
Response.Write("<tr>");
for (int i = 0; i < headTexts.Length; ++i)
{
Response.Write("<td");
if (styles != null && Common.StringUtils.IsNullOrEmpty(styles[i]) == false)
{
Response.Write(string.Format(" style=\"{0}\"", styles[i]));
}
Response.Write(">");
if (formats != null && Common.StringUtils.IsNullOrEmpty(formats[i]) == false)
{
Response.Write(string.Format(formats[i], row[fields[i]]));
}
else
{
Response.Write(row[fields[i]]);
}
Response.Write("</td>");
}
Response.Write("</tr>");
}
Response.Write("</table>");
Response.End();
}