寫了這么久的程序﹐越來越喜歡那種簡單的解決方法﹐這段時間在做一個報表系統﹐其中有需要轉Excel﹐而且要求兼容openoffice﹐遂利用asp語法,asp.net的控件封裝特性以及excel 2003的xml試算清格式做了一個看起來比較"清爽"的excel轉檔方案。
?
一.開始
?
原理很簡單﹐excel2003增加了一種xml電子表格的格式﹐如下﹕

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17

將這段代碼存成xml或xls的后綴﹐excel都能正確打開﹐當然openoffice則只能存成xml的后綴。
?
因此我們只要輸出一個這樣的文字文件就行。
?
但是如果要I/O操作﹐寫一個這樣的文字文件出來﹐還是比較煩瑣的﹐因此直接利用aspx的特性:
?
在aspx.cs中寫到﹕

2



3

4

5

6

7

8

?
而在aspx中則只要填入上上面那段代碼﹐當然<%@ Page Language="C#"
AutoEventWireup="true" CodeFile="ExcelExport.aspx.cs" Inherits="ExcelExport" %>不要忘嘍﹐這樣在直接訪問aspx時﹐就能夠下載一個excel檔案了。
二.模板語言
盡管asp的<%語法被很多人詬病﹐說是意大利面條﹐其實任何技朮都有其適用范圍﹐只要心中有刀...
?
asp的<%=%>和<% %>很適于UI的制作﹐可能有些TX沒有接觸過asp﹐簡單講一下﹐在aspx文件中是可以直接寫代碼的﹐不要類﹐方法﹐就是順序執行﹐如



2

3

4

這樣就完成了一個動態的頁面。將上面的代碼存成一個aspx﹐訪問一下就可以看
到效果了。
?
回過頭來﹐asp語法輸出一個DataSet的代碼如下(Source可以在aspx.cs中設置為一個屬性﹐然后從這里取)﹕



?2

?3

?4



?5

?6

?7

?8

?9

10

11



12

13

14

15

16



17

18

19

20



21

22

23

24

25

26


27



28

29

30

31

呵呵﹐千萬別把什么都放到<% %>來嘍﹐否則﹐那些罵asp的人可能又有戰場了。
只有與view有關的東西才到這里來,切記切記。
?
?
用這種方法﹐寫文字文件可謂..三.asp.net也要隆重上場了。
asp.net多了一個東西,ascx﹐這個東西除了它的"常規用法"外﹐也有一些"歪門邪道"﹐看招﹕
?
aspx:



?2

?3



?4

?5

?6

?7

?8

?9



10

11

12

13



14

15

16

ascx:

2

3

4

5

6

7

ascx.cs:

?2

?3

?4



?5

?6



?7

?8

?9

10



11

12

13

出來就是三個sheet表嘍﹐用這個東西﹐可是封裝的好方法呀﹐如何發揮它的效果﹐大家可以發揮想象力...
?
最后﹐還是要說明一下這種方式的優缺點﹕
優點﹕
1簡單﹐搭配asp.net的模板輸出引擎﹐直接完成檔案輸出﹐不需要任何的I/O操作和額外進程資源。
2.兼容OpenOffice﹐ 一般的OpenOffice都支持此種格式﹐基本上不需要作任何修改(部分格式如自動篩選可能不支持)
3.對各種Sheet表格式的支持充分(如居中﹐框線﹐合并﹐金額數字﹐條件格式﹐排序﹐篩選等)
缺點﹕
1.不支持Excel2003以下版本﹐如ExcelXP,Excel2000,Excel97
2.不能轉出圖表,圖片
3.當Excel中的xml格式設置錯誤時﹐除錯可能麻煩一些﹐但是Excel會提供出錯log﹐根據經驗﹐這個log還是基本上能指明出錯點的
?
適用范圍﹕在客戶端是openoffice或基本能保證Excel2003﹐且報表一般都為固定格式(如財報)或只有數據輸出的場合比較適用。
?
順便說一句﹐我很少用什么水晶報表呀﹐reporting service呀﹐原因是我喜歡自
己管控一切﹐我的user很刁(曾經有一個﹐它就要在報表上就是對某個數字要求能夠單擊時﹐能alert一下﹐hello﹐你好)﹐但是我﹐呵呵... 不怕!
?
完整Demo?專案下載﹐瀏覽﹕ExcelExport.aspx
注﹕我的是繁體﹐如果出錯﹐可以自己改一下