您的位置:首页 > 编程语言 > ASP

ASP.NET页面内容导出为Excel

2008-09-24 15:22 561 查看
这几天给公司的客户做了一个系统的报表的导出,现在总结一下

一、需要注意的是:

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页代码




Code
1



Public Sub ExportToExcel()Sub ExportToExcel(ByVal htmlString As Object)
2

Response.Clear()
3

Response.Buffer = True
4

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 = Nothing
56

Response.Write(strb)
57


58

Response.End()
59

End Sub
60


61



Protected Sub toExcel_btn_Click()Sub toExcel_btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles toExcel_btn.Click
62

ExportToExcel(Value_hid.Value)
63

End Sub

三、ASPX页面内容(通过脚本获取HTML代码)




Code
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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: