asp.net页面上的table如何导出EXCEL?

zzz9413 2010-10-25 04:38:18
搜索了两天,没有一个好的解决办法

因为我是用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文件,替换信息,再输出来。请问如何实现?
...全文
2236 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruhemei 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
我还是共享下我的方法吧
1,VS里新建一个aspx页面,命名为Excel.aspx。
2,因为要指定用领导做的Excel模板,随时可能会变化,不可能每次都在网页上辛辛苦苦的设置CSS吧?于是我把领导给的Excel模板保存为html格式,然后用VS打开。把html标记内的代码复制,替换掉Excel.aspx的html内容。这样就成功创建和EXCEL一样的aspx页面了。把要填写的那些空格都拖一个……
[/Quote]可是 那些生成的都是head里面的 body里面根本没有什么数据啊
l646335072 2011-12-16
  • 打赏
  • 举报
回复
很不错啊
梦猪 2011-10-11
  • 打赏
  • 举报
回复
我顶一个,不解释
xugan666 2011-07-20
  • 打赏
  • 举报
回复
我顶一个,不解释
H_R_J 2011-04-01
  • 打赏
  • 举报
回复
这个方法不错呀!
[Quote=引用 20 楼 wubudang 的回复:]
下面是我测试用的。这个具体你可以自己调整一下。
在excel2003可以,不过2007,2010会弹出提示,选择是也是可以显示的。

C# code

protected void Button1_Click(object sender, EventArgs e)
{
string strText = Export()
……
[/Quote]
dreaminglove 2011-04-01
  • 打赏
  • 举报
回复
table 数量的数据如何导出到excel??????????????

我也不懂啊??
zzz9413 2010-10-28
  • 打赏
  • 举报
回复
我还是共享下我的方法吧
1,VS里新建一个aspx页面,命名为Excel.aspx。
2,因为要指定用领导做的Excel模板,随时可能会变化,不可能每次都在网页上辛辛苦苦的设置CSS吧?于是我把领导给的Excel模板保存为html格式,然后用VS打开。把html标记内的代码复制,替换掉Excel.aspx的html内容。这样就成功创建和EXCEL一样的aspx页面了。把要填写的那些空格都拖一个Label进去方便赋值。
3,在前一页就把这个要导出的对象存入SESSION里。Session["obj"]=obj;
ASPX页面的Load事件里写代码:

对象类型 obj=(对象类型)Session["obj"];//主要需要把objext类型转换为你定义的那个对象类型

然后给单元格赋值:label1=obj.xiangmuzu;//项目组
label2=Obj.bianxieren//编写人 。。。

然后就是写输出本页为Excel的代码。搞定
zzz9413 2010-10-27
  • 打赏
  • 举报
回复
经过四天奋斗,想到了解决办法。下面是效果图

这是html的table
zzz9413 2010-10-27
  • 打赏
  • 举报
回复
经过四天奋斗,想到了解决办法。下面是效果图

这是html的table
http://hi.csdn.net/attachment/201010/27/4882417_1288151364gdLR.jpg
这是导出EXCEL的预览。完全根据EXCEL模板自由的设置,跟打印票据的形式一样,不拘泥于标题下面跟着数据的形式
wubudang 2010-10-27
  • 打赏
  • 举报
回复

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

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;
}
}
wubudang 2010-10-27
  • 打赏
  • 举报
回复
晚上我给你我写的导出Excel代码
qq22345111 2010-10-27
  • 打赏
  • 举报
回复
那就只有自己搞了
zzz9413 2010-10-27
  • 打赏
  • 举报
回复
导出的EXCEL和打印预揽,要求不一样。公司要导出的EXCEL跟他们领导填写的EXCEL格式一样。就是说,随时可能改变EXCEL模板的,而且怕惹版权问题不准用水晶报表等第三方控件。像这样
qq22345111 2010-10-27
  • 打赏
  • 举报
回复
如果我是你 我不会在取数据-》绑定-》呈现table-》导入Excel


wuyq11 2010-10-26
  • 打赏
  • 举报
回复
function saveCode(obj) {
var winname = window.open('', '_blank', 'top=10000');
var strHTML = document.all.tableExcel.innerHTML;
winname.document.open('text/html', 'replace');
winname.document.writeln(strHTML);
winname.document.execCommand('saveas','','excel.xls');
winname.close();
}
zzz9413 2010-10-26
  • 打赏
  • 举报
回复
终于来个明白人了。。。

[Quote=引用 12 楼 lost_painting 的回复:]
如梦的代码是直接把HTML输出保存为.XLS后缀的文件,这种做法可以适合大部分需求了.
楼主要的不是Table导出EXCEL,而是根据Table填充EXCEL模板中对应CELL的数据.
这个直接在后台做,不要生成了Table再想把Table填充.
直接操作EXCEL模板填充.然后将填充好的EXCEL模板发送到客户端.


引用 11 楼 zzz9413 的回复:
不知是我表述问题,还……
[/Quote]
鸭梨山大帝 2010-10-26
  • 打赏
  • 举报
回复
如梦的代码是直接把HTML输出保存为.XLS后缀的文件,这种做法可以适合大部分需求了.
楼主要的不是Table导出EXCEL,而是根据Table填充EXCEL模板中对应CELL的数据.
这个直接在后台做,不要生成了Table再想把Table填充.
直接操作EXCEL模板填充.然后将填充好的EXCEL模板发送到客户端.

[Quote=引用 11 楼 zzz9413 的回复:]
不知是我表述问题,还是你们看的太匆忙

grieview,datagird,fromview等等的方法都不适用于HTML 的table。
因为table表格是没有列可以选的,都是一个个lable或者textbox的集合

人生如梦说得是一个方法,但是那样导出来的EXCEL和TABLE格式是一样,我已经实现了。

我需要导出的是按写的EXCEL摸板

另如有实现方式可以给我留言,支……
[/Quote]
zzz9413 2010-10-26
  • 打赏
  • 举报
回复
不知是我表述问题,还是你们看的太匆忙

grieview,datagird,fromview等等的方法都不适用于HTML 的table。
因为table表格是没有列可以选的,都是一个个lable或者textbox的集合

人生如梦说得是一个方法,但是那样导出来的EXCEL和TABLE格式是一样,我已经实现了。

我需要导出的是按写的EXCEL摸板

另如有实现方式可以给我留言,支付宝50元奉上。
myhope88 2010-10-26
  • 打赏
  • 举报
回复
上面都说得差不多了,帮顶下喽
孟子E章 2010-10-26
  • 打赏
  • 举报
回复
参考
http://dotnet.aspx.cc/file/Export-Gridview-To-Excel-With-Multi-Sheet.aspx

其实数据是什么都可以

可以设置格式、样式、多个 Sheet
加载更多回复(7)

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧