asp.net导出Excel方法总结
2012-06-28 16:33
344 查看
一:这种方法是把 DataSet的DataTable里面的数据拼接成html的<table></table>形式输出。
缺点:(1)这是一种伪Excel格式,用Excel打开的时候会提示 "格式与文件扩展名格式不一致" 每次都要手动确定打开,烦
(2)这样一个一个的循环,效率低
优点:直接从浏览器输出,用户可以选择保存路径
View Code
public string GetExportString(DataSet ds)
{
StringBuilder data = new StringBuilder();//因为循环很多,用 StringBuilder速度会快很多
//data = ds.DataSetName + "\n";
foreach (DataTable tb in ds.Tables)//多个表
{
//data += tb.TableName + "\n";
data.Append("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");
//写出列名
data.Append("<tr style=\"font-weight: bold; white-space: nowrap;\">");
foreach (DataColumn column in tb.Columns)
{
data.Append("<td>");
data.Append(column.ColumnName);
data.Append("</td>");
}
data.Append("</tr>");
//写出数据
foreach (DataRow row in tb.Rows)
{
data.Append("<tr>");
foreach (DataColumn column in tb.Columns)
{
//if (column.ColumnName.Equals("证件编号") || column.ColumnName.Equals("报名编号"))
// data.Append("<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString() + "</td>");
//else
data.Append("<td>");
data.Append(row[column].ToString());
data.Append("</td>");
}
data.Append("</tr>");
}
data.Append("</table>");
}
return data.ToString();
}
public void ExportDsToXls(Page page, string fileName, DataSet ds)
{
page.Response.Clear();
page.Response.Buffer = true;
page.Response.Charset = "GB2312";
//page.Response.Charset = "UTF-8";<BR> //如果输出中文名乱码的话,可以这样编码 文件名 HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)
page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + System.DateTime.Now.ToString("_yyMMdd_hhmm") + ".xls");
page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
page.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
page.EnableViewState = false;
page.Response.Write(GetExportString(ds));
page.Response.End();
}
//style="vnd.ms-excel.numberformat:@" 可以去除自动科学计数法的困扰
//输出为Table,能够最大限度的减少字段中数据对生成的文件格式的影响,在这里我没有处理数据中含有HTML标签的情况 在页面后台中,这样使用就可以了
二:用到 Microsoft.Office.Interop.Excel dll,在服务器输出,输出的Excel在服务器,(如果是b/s架构的话还要想着怎么把这个导出的文件拿回来),而且如果出现异常或者中断的话,在服务 器上面有很多excel的进程需要手动去关闭,要不过不了多久,服务器就挂掉了,所以这个方法比较适合用在WinForm的开发,不适合用在web的。
缺点:(1)这是一种伪Excel格式,用Excel打开的时候会提示 "格式与文件扩展名格式不一致" 每次都要手动确定打开,烦
(2)这样一个一个的循环,效率低
优点:直接从浏览器输出,用户可以选择保存路径
View Code
public string GetExportString(DataSet ds)
{
StringBuilder data = new StringBuilder();//因为循环很多,用 StringBuilder速度会快很多
//data = ds.DataSetName + "\n";
foreach (DataTable tb in ds.Tables)//多个表
{
//data += tb.TableName + "\n";
data.Append("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");
//写出列名
data.Append("<tr style=\"font-weight: bold; white-space: nowrap;\">");
foreach (DataColumn column in tb.Columns)
{
data.Append("<td>");
data.Append(column.ColumnName);
data.Append("</td>");
}
data.Append("</tr>");
//写出数据
foreach (DataRow row in tb.Rows)
{
data.Append("<tr>");
foreach (DataColumn column in tb.Columns)
{
//if (column.ColumnName.Equals("证件编号") || column.ColumnName.Equals("报名编号"))
// data.Append("<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString() + "</td>");
//else
data.Append("<td>");
data.Append(row[column].ToString());
data.Append("</td>");
}
data.Append("</tr>");
}
data.Append("</table>");
}
return data.ToString();
}
public void ExportDsToXls(Page page, string fileName, DataSet ds)
{
page.Response.Clear();
page.Response.Buffer = true;
page.Response.Charset = "GB2312";
//page.Response.Charset = "UTF-8";<BR> //如果输出中文名乱码的话,可以这样编码 文件名 HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)
page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + System.DateTime.Now.ToString("_yyMMdd_hhmm") + ".xls");
page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
page.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
page.EnableViewState = false;
page.Response.Write(GetExportString(ds));
page.Response.End();
}
//style="vnd.ms-excel.numberformat:@" 可以去除自动科学计数法的困扰
//输出为Table,能够最大限度的减少字段中数据对生成的文件格式的影响,在这里我没有处理数据中含有HTML标签的情况 在页面后台中,这样使用就可以了
二:用到 Microsoft.Office.Interop.Excel dll,在服务器输出,输出的Excel在服务器,(如果是b/s架构的话还要想着怎么把这个导出的文件拿回来),而且如果出现异常或者中断的话,在服务 器上面有很多excel的进程需要手动去关闭,要不过不了多久,服务器就挂掉了,所以这个方法比较适合用在WinForm的开发,不适合用在web的。
相关文章推荐
- ASP.NET导出EXCEL方法总结
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
- 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
- asp.net导出excel方法总结
- asp.net导出excel方法总结
- asp.net 导出Excel方法总结
- ASP.NET导出Excel的方法总结
- Asp.net WEB页面直接导出Excel方法
- asp.net导出excel数据的常见方法汇总
- Asp.Net使用Npoi导入导出Excel的方法
- asp.net DataTable导出 excel的方法记录(第三方)
- asp.Net导出Excel的快捷方法
- asp.net导出Excel乱码的原因及解决方法
- asp.net导出数据到Excel的三种方法
- asp.net 利用NPOI导出Excel通用类的方法
- 原创-Asp.net导出word的方法总结(利用response.write方式将html模板导出word,和dsoframer导出word)
- Asp.net中DataTable导出到Excel的方法介绍
- ASP.NET中导出excel/word等类型文件的简单方法
- [转]asp.net导出数据到Excel的三种方法
- asp.net导出Excel文件之方法比较