日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

轉Excel的一種簡單方法

發布時間:2023/12/9 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 轉Excel的一種簡單方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

.開始

?

原理很簡單﹐excel2003增加了一種xml電子表格的格式﹐如下﹕

?1<?xml?version="1.0"?>
?2<?mso-application?progid="Excel.Sheet"?>
?3<Workbook
?4?xmlns="urn:schemas-microsoft-com:office:spreadsheet"
?5?xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
?6?<Worksheet?ss:Name="Sheet1">
?7??<Table>
?8???<Row>
?9?????<Cell?ss:MergeAcross="1"><Data?ss:Type="String">Excel?xml</Data></Cell>
10???</Row>
11???<Row>
12????<Cell><Data?ss:Type="String">A2</Data></Cell>
13????<Cell><Data?ss:Type="Number">0.112</Data></Cell>
14???</Row>
15??</Table>
16?</Worksheet>
17</Workbook>

將這段代碼存成xmlxls的后綴﹐excel都能正確打開﹐當然openoffice則只能存成xml的后綴。

?

因此我們只要輸出一個這樣的文字文件就行。

?

但是如果要I/O操作﹐寫一個這樣的文字文件出來﹐還是比較煩瑣的﹐因此直接利用aspx的特性:

?

aspx.cs中寫到﹕

1??protected?void?Page_Load(object?sender,?EventArgs?e)
2????{
3?????????Response.Clear();
4????????Response.ContentType?=?"application/vnd.ms-excel";
5????????string?excelname?=?"ExcelReport";?????
6????????Response.AddHeader("content-disposition",?"attachment;?filename="?+?System.Web.HttpUtility.UrlEncode(excelname,?System.Text.Encoding.UTF8)?+?".xml");
7????}

8

?

而在aspx中則只要填入上上面那段代碼﹐當然<%@ Page Language="C#"

AutoEventWireup="true" CodeFile="ExcelExport.aspx.cs" Inherits="ExcelExport" %>不要忘嘍﹐這樣在直接訪問aspx時﹐就能夠下載一個excel檔案了。

.模板語言

盡管asp<%語法被很多人詬病﹐說是意大利面條﹐其實任何技朮都有其適用范圍﹐只要心中有刀...

?

asp<%=%><% %>很適于UI的制作﹐可能有些TX沒有接觸過asp﹐簡單講一下﹐在aspx文件中是可以直接寫代碼的﹐不要類﹐方法﹐就是順序執行﹐如

1<%
2DateTime?now?=?DateTime.Now;
3
%>
4你好﹐現在是<%=now.ToString("yyyy/MM/dd?HH:mm:ss")%>



這樣就完成了一個動態的頁面。將上面的代碼存成一個aspx﹐訪問一下就可以看

到效果了。

?

回過頭來﹐asp語法輸出一個DataSet的代碼如下(Source可以在aspx.cs中設置為一個屬性﹐然后從這里取)

?1<%@?Import?Namespace="System.Data"?%>
?2?<Worksheet?ss:Name="<%=SheetName%>">
?3??<Table>
?4???<%
?5???????if?(Source?!=?null?&&?Source.Tables.Count?>?0?&&?Source.Tables[0].Rows.Count?>?0)
?6???????{
?7???????????foreach?(DataRow?dr?in?Source.Tables[0].Rows)
?8???????????{
?9???????????????
%>
10???????????????<Row>
11???????????????<%
12???????????????foreach?(object?data?in?dr.ItemArray)
13???????????????{
14???????????????????
%>
15????????????????????<Cell><Data?ss:Type="String"><%=data.ToString()%></Data></Cell>
16???????????????????<%
17???????????????}//end?for?each?cell
18???????????????
%>
19???????????????</Row>
20???????????????<%
21???????????}//end?for?each?row
22???????}//end?if?Source?is?null
23???????else
24???????{
25???????
%>
26???????<Row><Cell><Data?ss:Type="String">sorry?no?data</Data></Cell></Row>
27???????<%???
28???????}
29???
%>
30??</Table>
31?</Worksheet>

呵呵﹐千萬別把什么都放到<% %>來嘍﹐否則﹐那些罵asp的人可能又有戰場了。

只有與view有關的東西才到這里來,切記切記。

?

?

用這種方法﹐寫文字文件可謂..

.asp.net也要隆重上場了。

asp.net多了一個東西,ascx﹐這個東西除了它的"常規用法"外﹐也有一些"歪門邪"﹐看招﹕

?

aspx:

?1<%@?Page?Language="C#"?AutoEventWireup="true"??
?2CodeFile="ExcelExport.aspx.cs"?Inherits="ExcelExport"?
%>
?3<%@?Register?Src="Sheet3.ascx"?TagName="Sheet3"?TagPrefix="uc2"?%>
?4<?xml?version="1.0"?>
?5<?mso-application?progid="Excel.Sheet"?>
?6<Workbook
?7?xmlns="urn:schemas-microsoft-com:office:spreadsheet"
?8?xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
?9<%
10for(int?i=0;i<3;i++){
11
%>
12<uc2:Sheet3?ID="Sheet3_1"?SheetName="Sheet<%=(i+1)%>"?runat="server"?/>
13<%
14}
15
%>
16</Workbook>

ascx:

1<Worksheet?ss:Name="<%=SheetName%>">
2??<Table>
3???<Row>
4????<Cell><Data?ss:Type="String">簡單的sheet表頁</Data></Cell>
5???</Row>
6??</Table>
7?</Worksheet>



ascx.cs:

?1string?_sheetName?=?"default";
?2
?3????public?string?SheetName
?4????{
?5????????get
?6????????{
?7????????????return?_sheetName;
?8????????}

?9????????set
10????????{
11????????????_sheetName?=?value;
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

注﹕我的是繁體﹐如果出錯﹐可以自己改一下

總結

以上是生活随笔為你收集整理的轉Excel的一種簡單方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。