这几天给公司的客户做了一个系统的报表的导出,现在总结一下
一、需要注意的是:
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
1Public 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
1Public 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
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