ASP.NET页面内容导出为Excel
这几天给公司的客户做了一个系统的报表的导出,现在总结一下
一、需要注意的是:
1.页面内容中如果有多张Table,导出到Excel是表格列宽会失效。
2.设置表格的属性为字符串加上x:str="",如<table x:str=""></table>,不加默认是数值,0005导出后会转换为数字5(x:str=""在单元格中指定无效)
3.如果导出的内容为数据要在表格属性上加上x:num="",如<td style=" width: 54pt;" x:num="" align="center">
4.设置ASPX页面属性ValidateRequest="false"
二、下面是代码,CS页代码
1

Public Sub ExportToExcel()Sub ExportToExcel(ByVal htmlString As Object)2
Response.Clear()3
Response.Buffer = True4
Dim fileName As String = "化学月报"5
Dim strb As New StringBuilder()6
'显示Excel中的网格线7
strb.Append("<html xmlns='http://www.w3.org/1999/xhtml' xmlns:x='urn:schemas-microsoft-com:office:excel'>")8

9

10
strb.Append("<head>")11

12
strb.Append("<!--[if gte mso 9]><xml>")13

14
strb.Append("<x:ExcelWorkbook>")15

16
strb.Append("<x:ExcelWorksheets>")17

18
strb.Append("<x:ExcelWorksheet>")19

20
strb.Append("<x:Name>化学月报</x:Name>")21

22
strb.Append("<x:WorksheetOptions>")23

24
strb.Append("<x:Print>")25
strb.Append("<x:ValidPrinterInfo/>")26

27
strb.Append("</x:Print>")28

29
strb.Append("</x:WorksheetOptions>")30

31
strb.Append("</x:ExcelWorksheet>")32

33
strb.Append("</x:ExcelWorksheets>")34

35
strb.Append("</x:ExcelWorkbook>")36

37
strb.Append("</xml>")38

39
strb.Append("<![endif]--> ")40

41
strb.Append("</head>")42

43
strb.Append("<body>")44
'添加页面内容45
strb.Append(CStr(htmlString))46

47
strb.Append("</body></html>")48

49
Response.AppendHeader("content-disposition", "attachment;filename=" & System.Web.HttpUtility.UrlEncode(fileName & "", System.Text.Encoding.UTF8) + ".xls")50
'设置编码51
Response.Charset = "GB2312"52
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312")53

54
Response.ContentType = "application/vnd.ms-excel"55
Response.Charset = Nothing56
Response.Write(strb)57

58
Response.End()59
End Sub60

61

Protected Sub toExcel_btn_Click()Sub toExcel_btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles toExcel_btn.Click62
ExportToExcel(Value_hid.Value)63
End Sub
三、ASPX页面内容(通过脚本获取HTML代码)
1

<%
@ Page Language="VB" AutoEventWireup="false" CodeFile="ToExcel.aspx.vb" Inherits="ToExcel" ValidateRequest="false" %>2

3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">4

5
<html xmlns="http://www.w3.org/1999/xhtml" >6
<head runat="server">7
<title>无标题页</title>8

<script type="text/javascript">
9
10
function getHtml()11

{12
//获取报表主体部分的HTML代码13
document.getElementById("Value_hid").value=document.getElementById("Report_div").outerHTML;14
15
}16

17

18
</script>19
</head>20

<%
--body中设置,页面加载完后执行getHtml()--%>21
<body onload="getHtml()">22
<form id="form1" runat="server">23
<div>24
<asp:Button ID="toExcel_btn" runat="server" Text="导出为Excel" /><br />25

<%
--要导出到Excel中的内容--%>26
<div id="Report_div" >27
<table x:str="">28
<tr>29
<td style="width: 200px">30
宽度200px</td>31
<td style="width: 100px">32
数字</td>33
<td style="width: 100px">34
字符串格式的数字</td>35
</tr>36
<tr>37
<td style="width: 200px; height: 21px;">38
</td>39
<td style="width: 100px; height: 21px;" x:num="">40
0005</td>41
<td style="width: 100px; height: 21px;">42
0005</td>43
44
</tr>45
<tr>46
<td style="width: 200px">47
</td>48
<td style="width: 100px">49
导出后为5</td>50
<td style="width: 100px" >51
导出后还是为0005</td>52
53
</tr>54
</table>55
</div>56
57

<%
--隐藏控件--%> 58
<input id="Value_hid" type="hidden" runat="server"/>59
</div>60
</form>61
</body>62
</html>63

四、页面

五、导出后的Excel

浙公网安备 33010602011771号