当前位置: 代码迷 >> ASP.NET >> asp.net页面下的table怎么导出EXCEL
  详细解决方案

asp.net页面下的table怎么导出EXCEL

热度:2864   发布时间:2013-02-25 00:00:00.0
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("<td class='td_center'>事业部</td>");            table.Append("</tr>");            table.Append("</table>");            return table.ToString();        }        /// <summary>        /// 导出Excel        /// </summary>        /// <param name="page">操作页面</param>        /// <param name="fileName">导出的文件名称</param>        /// <param name="text">要导出的内容</param>        public void ExportExcel(Page page, string fileName, string text)        {            page.EnableViewState = false;            try            {                page.Response.ClearContent();                page.Response.Buffer = true;                page.Response.Charset = "GB2312";//设置字符集,解决中文乱码问题                page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");                page.Response.Write("<meta http-equiv=Content-Type content=\"text/html;charset=GB2312\">");//解决乱码问题                //解决HTTP头中文乱码问题                string strExcelText = DateTime.Now.ToShortDateString() + "\t" + fileName;//Excel显示的内容                string strEncode = System.Web.HttpUtility.UrlEncode(strExcelText, System.Text.Encoding.UTF8);//进行编码的格式,用gb2312出错                page.Response.AddHeader("content-disposition", "attachment;filename=\"" + strEncode + ".xls\"");//对保存标题进行编码                page.Response.ContentType = "application/vnd.xls";//设置输出格式                page.Response.Write(@"<html><head><style>.table{border: 1px solid #000000;padding:0;margin:0 auto;border-width: thin;border-collapse: collapse;}                                    .td_head{border: 1px solid #000000;border-width: thin;text-align:center;font-size:12px;padding: 3px 3px 3px 8px;background: #000000;}                                    .td_left{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:left;padding: 3px 3px 3px 8px;mso-number-format:\@;}                                    .td_left_number{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:left;padding: 3px 3px 3px 8px;}                                    .td_center{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:center;padding: 3px 3px 3px 8px;mso-number-format:\@;}                                    .td_center_number{border: 1px solid #7777cc;font-size:12px;border-width: thin;text-align:center;padding: 3px 3px 3px 8px;}                                    .td_right{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:right;padding: 3px 3px 3px 8px;mso-number-format:\@;}                                    .td_right_number{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:right;padding: 3px 3px 3px 8px;}                                    </style></head><body>");                StringWriter sw = new StringWriter();                HtmlTextWriter htw = new HtmlTextWriter(sw);                htw.WriteLine(text);//将数据输出                page.Response.Write(sw.ToString());                page.Response.Write("</body></html>");                page.Response.Flush();                page.Response.End();            }            catch            {                return;            }            finally            {                //恢复原来控件内容                page.EnableViewState = true;            }        }
  相关解决方案