日期:2014-05-17  浏览次数:20489 次

asp.net页面上的table如何导出EXCEL?
搜索了两天,没有一个好的解决办法

因为我是用table只显示一条记录的详细信息的,不是gridview的

实验了两种方法:
1,把一个EXCEL表保存为html格式,然后再改后缀名为aspx
在页面顶部加入下面两句
<%Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>")%>
<%response.ContentType = "application/vnd.ms-excel"%>
这样是可以导出我设置好的那个EXCEL表格,但是无法设置变量。

2,调用DCOM组件,调用EXCEL表程序的。太麻烦,总是不能释放线程

我想在服务器端建立一个EXCEL的模板文件(参见第一种方法),就是把那些动态改变的信息部填,等到要导出的时候,在后台先读取EXCEL文件,替换信息,再输出来。请问如何实现?

------解决方案--------------------
/// <summary>
/// 将DataTable 导出为EXCEL,并直接提供下载
/// </summary>
/// <param name="ds">需要导处的DataTable</param>
/// <param name="fileName">到处生成的文件名</param>
/// 
public bool ExportExcelByDataTable(DataTable dt, string fileName)
{
try
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Charset = "utf-7";
HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-7");

HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
DataGrid dg=new DataGrid();
dg.HeaderStyle.CssClass="dgHead";
dg.DataSource=dt;
dg.DataBind();
dg.RenderControl(htmlWrite);
// GridView gv = new GridView();
// gv.HeaderStyle.CssClass = "gvHead";
// gv.DataSource = dt;
// gv.DataBind();
// gv.RenderControl(htmlWrite);
HttpContext.Current.Response.Write(stringWrite.ToString());
HttpContext.Current.Response.AddHeader("content-disposition","attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)+".xls");
HttpContext.Current.Response.Charset = "gb2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
HttpContext.Current.Response.End();
return true;
}
catch
{
return false;
}
}
------解决方案--------------------

下面是我测试用的。这个具体你可以自己调整一下。
在excel2003可以,不过2007,2010会弹出提示,选择是也是可以显示的。
C# code

        protected void Button1_Click(object sender, EventArgs e)
        {
            string strText = Export()
            ExportExcel(this, "测试表", strText);
        }

        /// <summary>
        /// 导出
        /// </summary>
        /// <returns>要导出的内容</returns>
        public string Export()
        {
            StringBuilder table = new StringBuilder();
            table.Append(@"<b>项目组开模</b><table class='table'><tr><td class='td_center' colspan='2'>项目组</td><td class='td_center' colspan='2'>OA</td><td class='td_center'>编写人</td>
                         <td class='td_center' colspan='2'>周大有</td></tr>");
            table.Append("<tr><td class='td_center'>序号</td>");
            table.Append("<td class='td_center'>产品型号(完整)</td>");
            table.Append("<td class='td_center'>营业员/营业办</td>");
            table.Append("<td class='td_center'>终端客户/方案公司或代理</td>");
            table.Append("<td class='td_center'>用途</td>");
            table.Append("<td class='td_center'>产品信息</td>");
            table.Append("&l