ASP.NET使用xslt將xml轉(zhuǎn)換成Excel
序:
最近在給客戶做一個(gè)管理系統(tǒng)的時(shí)候,客戶提出要將查詢結(jié)果導(dǎo)出到Excel。對(duì)于還是實(shí)習(xí)生的我倍感壓力,于是找了點(diǎn)資料。網(wǎng)上有個(gè)示例,其中方法十分簡(jiǎn)單。于是照貓畫(huà)虎,把方法和心得與大家分享。OK,Let`s go
第一步:
創(chuàng)建一個(gè)Excel文件(就是 普通的Excel),在第一個(gè)單元格輸入“city”,然后選擇“另存為”,此時(shí)彈出保存窗口。注意:將保持格式選擇為“XML 表格(*.xml)”,點(diǎn)擊保存。完畢后用記事本打開(kāi)這個(gè)Excel文件。你將看到如下的代碼
<?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> <Author>MC SYSTEM</Author> <LastAuthor>MC SYSTEM</LastAuthor> <Created>2009-05-28T16:20:57Z</Created> <Company>MC SYSTEM</Company> <Version>11.5606</Version> </DocumentProperties> <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> <WindowHeight>11250</WindowHeight> <WindowWidth>18180</WindowWidth> <WindowTopX>120</WindowTopX> <WindowTopY>75</WindowTopY> <ProtectStructure>False</ProtectStructure> <ProtectWindows>False</ProtectWindows> </ExcelWorkbook> <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Center"/> <Borders/> <Font ss:FontName="宋體" x:CharSet="134" ss:Size="12"/> <Interior/> <NumberFormat/> <Protection/> </Style> </Styles> <Worksheet ss:Name="Sheet1"> <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"> <Row ss:> <Cell><Data ss:Type="String">org</Data></Cell> </Row> </Table> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <Unsynced/> <Selected/> <Panes> <Pane> <Number>3</Number> <ActiveRow>3</ActiveRow> <ActiveCol>1</ActiveCol> </Pane> </Panes> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name="Sheet2"> <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <Unsynced/> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name="Sheet3"> <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <Unsynced/> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> </Workbook>
其實(shí)這個(gè)就是將XML轉(zhuǎn)換成Excel最關(guān)鍵的部分。實(shí)際上這就是Excel對(duì)應(yīng)的XML格式。也就是說(shuō)按照這個(gè)格式來(lái)寫(xiě)一個(gè)XML文件,然后用Excel打開(kāi),Excel會(huì)將這個(gè)文件以Excel的樣子正確的現(xiàn)實(shí)出來(lái)。
第二步:
在.net項(xiàng)目中添加一個(gè)xslt文件。學(xué)過(guò)xslt的朋友都知道通過(guò)xslt可以將xml轉(zhuǎn)換成其他的格式。可能有的朋友還沒(méi)有理解我的意思。其實(shí)我們通過(guò)xslt將xml轉(zhuǎn)換成“第一步”中的格式,然后保存或者輸出到客戶端就完成了導(dǎo)出Excel的功能了。
對(duì)于第一步中的XML代碼我們要進(jìn)行一些修改,因?yàn)檫@是Excel自動(dòng)生成的,其中包含了大量的無(wú)用信息。修改后的代碼如下:
<?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <Worksheet ss:Name="Sheet1"> <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"> <Row ss:> <Cell> <Data ss:Type="String"> city <!--還記得嗎?這是第一步中輸入的city --> </Data> </Cell> </Row> </Table> </Worksheet> </Workbook>
到目前為止,這個(gè)代碼還沒(méi)有實(shí)際的用處。我們將這個(gè)代碼copy到創(chuàng)建的xslt文件中,并將xslt的一些語(yǔ)法加入到上面的代碼中,最后xslt文件將是這個(gè)樣子:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <Worksheet ss:Name="Sheet1"> <Table> <xsl:for-each select="*"> <Row> <Cell> <Data ss:Type="String"> <xsl:value-of select="."/> </Data> </Cell> <Cell> <Data ss:Type="String"> <xsl:value-of select="."/> </Data> </Cell> </Row> </xsl:for-each> </Table> </Worksheet> </Workbook> </xsl:template> </xsl:stylesheet>
保存這個(gè)xslt文件。
第三步:
編寫(xiě).net后臺(tái)代碼,我是通過(guò)一個(gè)按鈕事件觸發(fā)導(dǎo)出的。代碼如下:
private void button1_Click(object sender, EventArgs e) { XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml("<records><record><org>北京</org></record></records>"); XslCompiledTransform xct = new XslCompiledTransform(); xct.Load(Application.StartupPath+"\\excel.xslt"); XmlTextWriter writer = new XmlTextWriter("output.xls", null); writer.WriteProcessingInstruction("xml", "version="1.0""); xct.Transform(xdoc, null,writer); writer.Close(); }
總結(jié):
其實(shí)這個(gè)方法的核心就是利用.net的xslt轉(zhuǎn)換功能將xml以一種特殊格式輸出出去。而這種格式可以利用Excel軟件自動(dòng)生成
- asp.net導(dǎo)出EXCEL的功能代碼
- asp.net DataGridView導(dǎo)出到Excel的三個(gè)方法[親測(cè)]
- asp.net 讀取并顯示excel數(shù)據(jù)的實(shí)現(xiàn)代碼
- ASP.NET操作EXCEL的總結(jié)篇
- ASP.NET導(dǎo)出Excel打開(kāi)時(shí)提示:與文件擴(kuò)展名指定文件不一致解決方法
- asp.net生成Excel并導(dǎo)出下載五種實(shí)現(xiàn)方法
- ASP.NET(C#)讀取Excel的文件內(nèi)容
- asp.net使用npoi讀取excel模板并導(dǎo)出下載詳解
- Asp.Net使用Npoi導(dǎo)入導(dǎo)出Excel的方法
- asp.net中EXCEL數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)的方法
相關(guān)文章
教你Asp.net下使用mysql數(shù)據(jù)庫(kù)的步驟
近日,在項(xiàng)目中遇到了麻煩,客戶非要求使用mysql數(shù)據(jù)庫(kù),對(duì)于我從來(lái)么有使用過(guò)的人來(lái)說(shuō),很是頭疼,最后還是硬著頭皮弄好了。期間也遇到了各種各樣的問(wèn)題,現(xiàn)在把他整理在此,希望對(duì)那些和我一樣從來(lái)沒(méi)有使用過(guò)的人,能快速入手2012-05-05基于asp.net下使用jquery實(shí)現(xiàn)ajax的解決方法
本文以最簡(jiǎn)單的方法為新手示范如何使用jquery實(shí)現(xiàn)ajax技術(shù)(所以本文是專為新手所寫(xiě),老鳥(niǎo)勿噴,大神此處省略一萬(wàn)字)。至于什么是jquery什么是ajax,自己谷歌去2013-05-05ASP.NET 前臺(tái)javascript與后臺(tái)代碼調(diào)用
ASP.NET中前臺(tái)javascript與后臺(tái)代碼調(diào)用的實(shí)現(xiàn)代碼說(shuō)明。2009-08-08ASP.NET 2.0寫(xiě)無(wú)限級(jí)下拉菜單
ASP.NET 2.0提供了一個(gè)Menu 類,可以方便地創(chuàng)建水平或者垂直方向的下拉菜單,下面就是一個(gè)例子:2008-12-12導(dǎo)致Asp.Net站點(diǎn)重啟10個(gè)原因小結(jié)分析
Asp.Net站點(diǎn)有時(shí)候會(huì)莫名其妙的重啟,什么原因?qū)е碌膮s不得而知,經(jīng)過(guò)一番折騰后,我總結(jié)了導(dǎo)致Asp.Net站點(diǎn)重啟的10個(gè)原因,需要的朋友可以參考下。2011-08-08.NET Core實(shí)現(xiàn)企業(yè)微信獲取部門成員
這篇文章介紹了.NET Core實(shí)現(xiàn)企業(yè)微信獲取部門成員的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06一個(gè)比較通用的分頁(yè)控件,完整的設(shè)計(jì)時(shí)支持和比較流行的分頁(yè)模式(提供源碼下載)
本分頁(yè)控件還包含簡(jiǎn)單屬性,復(fù)雜屬性,自定義視圖狀態(tài),分頁(yè)事件,創(chuàng)建控件,render控件,Attribute,設(shè)計(jì)時(shí)支持等比較齊全的自定義控件的元素,是個(gè)不錯(cuò)學(xué)習(xí)自定義控件開(kāi)發(fā)的例子2010-12-12