最近在做统计功能,要求统计结果(表格)既能查看(BS系统,在浏览器查看),又能输出为excel文件。对于输出excel文件,在网上找到n种方案,因为还需查看,最终选择了统计结果输出为table,查看时直接显示table,输出excel时把table写进输出流,ContentType设置为application/vnd.ms-excel再输出,具体方法如下:

软件环境:VS2008,C#,IE,office2010

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table>
......
</table>
</body>
</html>

2.Response的属性设置

Response关键属性有几个

 Public Sub toexecl(ByVal filenames As String)
'输出的应用类型Response.ContentType = "application/vnd.ms-excel";
'设定编码方式,若输出的excel有乱码,可优先从编码方面解决Response.Charset = "gb2312";
Response.ContentEncoding = System.Text.Encoding.UTF8
'//关闭ViewState,此属性在Page中
EnableViewState = False
'//filenames是自定义的文件名
Response.AppendHeader("Content-Disposition", "attachment;filename=" & filenames)
'//content是步骤1的html,注意是string类型
Response.Write(tablelist.Text)
Response.End()
End Sub

这样已经能发布最基本的excel,下面说些细节

1.样式最好用css,即设style属性或class属性,有些样式属性excel不认的。th、td的宽度最好在colgroup中设

2.在excel的格子中换行,可以用这个<br style='mso-data-placement:same-cell;'/>

3.关于边框宽度的问题,如果你的table是全边框,可以设置table的border属性,其中0=不显示边框。

如果表的格式比较复杂,特别是表头,有些边要隐藏的,这个要先把table的border=0,之后对每个th td用css的边框样式进行设置,但这里有个地方要注意,就是宽度,设为0.5pt(例:border-left: 0.5pt solid #000;),如果设为1px输出的边框会很粗。

4.excel空余部分边框的问题。用此方法输出的excel,空余部分边框都不显示,如果要做成想普通excel的样子,需在输出流的head部分加上excel的设置,例子如下:

<!--[if gte mso 9]><xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
   <x:ExcelWorksheet>

<x:Name></x:Name>
    <x:WorksheetOptions>    
     <x:Selected/>     
    </x:WorksheetOptions>
   </x:ExcelWorksheet>  
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml><![endif]-->

最后附上一个成果作为例子,扩展名为xls可用excel打开

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name></x:Name><x:WorksheetOptions><x:Selected/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
<style type="text/css">
.td
{
width: 84px;
}
.gdtjContainer .tb tr
{
text-align: center;
vertical-align: middle;
}
.gdtjContainer .tb th
{
border-left: 0.5pt solid #000;
border-bottom: 0.5pt solid #000;
text-align: center;
font-weight: normal;
font-size: 10pt;
middle: ;;height:30px;}
.gdtjContainer .header th
{
font-size: 12pt;
}
.gdtjContainer .tb tr th.noleftborder
{
border-left: none;
}
.gdtjContainer .tb tr th.rightborder
{
border-right: 0.5pt solid #000;
}
</style>
</head>
<body>
<div class="gdtjContainer">
<table class="tb" cellspacing="0" cellpadding="0" border="0" width="2184px">
<colgroup>
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
<col class="td" />
</colgroup>
<tr style="height: 40px">
<th style="font-size: 20pt; font-family: 宋体; border: none;" colspan="26">
2011年增城市单位土地使用权出让情况登记表(统计时间从2011-06-29至2011-06-30)
</th>
</tr>
<tr>
<th colspan="23" style="border-left: none;">
&nbsp;
</th>
<th style="text-align: left; font-size: 12pt; border-left: none;" colspan="3">
单位:万元、平方米
</th>
</tr>
<tr class="header">
<th rowspan="2">
合同编号
</th>
<th colspan="2" rowspan="2">
用地单位
</th>
<th colspan="2" rowspan="2">
土地座落
</th>
<th rowspan="2">
供地面积
</th>
<th style="border-left: none">
&nbsp;
</th>
<th>
&nbsp;
</th>
<th rowspan="2">
用途
</th>
<th colspan="3" rowspan="1">
出让金
</th>
<th rowspan="2">
容积率
</th>
<th rowspan="2">
建筑密度
</th>
<th rowspan="2">
绿地率
</th>
<th rowspan="2">
规划建筑面积
</th>
<th rowspan="2">
出让方式
</th>
<th rowspan="2">
审批日期
</th>
<th rowspan="2">
合同签订日期
</th>
<th rowspan="2">
动工期限
</th>
<th rowspan="2">
竣工日期
</th>
<th rowspan="2">
批次情况
</th>
<th rowspan="2">
合同约定缴费期限
</th>
<th rowspan="2">
缴费情况
</th>
<th rowspan="2">
滞纳金
</th>
<th rowspan="2" class="rightborder">
备注
</th>
</tr>
<tr style="height: 40px" class="header">
<th>
新增面积
</th>
<th style="font-size: 10pt;">
保障性住房用地占用面积
</th>
<th>
应缴
</th>
<th>
已缴
</th>
<th>
未缴
</th>
</tr>
<tr>
<th>
440183-2011-
</th>
<th colspan="2">
</th>
<th colspan="2">
&nbsp;
</th>
<th>
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
拍卖出让
</th>
<th>
&nbsp;
</th>
<th>
2011-06-29
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th class="rightborder">
&nbsp;
</th>
</tr>
<tr>
<th>
&nbsp;
</th>
<th colspan="2">
合计
</th>
<th colspan="2">
&nbsp;
</th>
<th>
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th>
&nbsp;
</th>
<th class="rightborder">
&nbsp;
</th>
</tr>
</table>
</div>
</body>
</html>

转载于http://www.cnblogs.com/cannel/archive/2011/06/30/2094189.html

乱码解决:

HttpContext.Current.Response.Write("<meta   http-equiv=Content-Type   content=text/html;charset=GB2312>");
string fileName = HttpUtility.UrlEncode(ExcelFileName+".xls", Encoding.GetEncoding("GB2312"));
HttpContext.Current.Response.AddHeader("content-disposition",
"attachment;filename=" + fileName);

参考:http://www.cnblogs.com/jillzhang/archive/2007/09/26/906588.html

最新文章

  1. 对Live Writer支持的继续改进:设置随笔地址别名(EntryName)
  2. bzoj4404: [Neerc2015]Binary vs Decimal
  3. Android 自学之列表视图ListView和ListActivity
  4. 对同一个项目下的多个数据库Context进行迁移Migrations
  5. MySQL - “Timeout error occurred trying to start MySQL Daemon”解决方法
  6. 自动生成代码工具【JAVA版】
  7. [LeetCode]题解(python):013-Roman to Integer
  8. c#1所搭建的核心基础之值类型和引用类型
  9. sql server 数值的四舍五入
  10. vue.js小总结
  11. React browserHistory.push()传参
  12. angular+webpack(二)
  13. java中生成验证码,以及验证码的使用
  14. Android数据存储:SQLite
  15. Java知多少(48)try语句的嵌套
  16. [C#基础]说说lock到底锁谁?(补充与修改)
  17. js闭包的作用
  18. HDU.2516 取石子游戏 (博弈论 斐波那契博弈)
  19. LCT维护子树信息
  20. ATM交换机 和普通交换机区别

热门文章

  1. server2003 IIS 错误 解决
  2. CentOS 6.5上安装python2.7、pip以及Python命令行补全和yum冲突解决
  3. Python 实例——进度条,文件读取
  4. selenium实现excel文件数据的读、写
  5. OpenLDAP搭建全过程
  6. [日志] spring boot + logback 日志输出配置
  7. 【Error】安装程序无法打开注册表项 UNKNOWN\Components\...
  8. Ubuntu12.04 安装adb
  9. 10个足以让你成为更优秀的程序员的C语言资源
  10. Forcing restore from package sources