ASP.NET使用xslt將xml轉換成Excel_實用技巧

來源:互聯網
上載者:User

序:

  最近在給客戶做一個管理系統的時候,客戶提出要將查詢結果匯出到Excel。對於還是實習生的我倍感壓力,於是找了點資料。網上有個樣本,其中方法十分簡單。於是照貓畫虎,把方法和心得與大家分享。OK,Let`s go

第一步:

  建立一個Excel檔案(就是 普通的Excel),在第一個儲存格輸入“city”,然後選擇“另存新檔”,此時彈出儲存視窗。注意:將保持格式選擇為“XML 表格(*.xml)”,點擊儲存。完畢後用記事本開啟這個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>

  其實這個就是將XML轉換成Excel最關鍵的部分。實際上這就是Excel對應的XML格式。也就是說按照這個格式來寫一個XML檔案,然後用Excel開啟,Excel會將這個檔案以Excel的樣子正確的現實出來。

第二步:

  在.net項目中添加一個xslt檔案。學過xslt的朋友都知道通過xslt可以將xml轉換成其他的格式。可能有的朋友還沒有理解我的意思。其實我們通過xslt將xml轉換成“第一步”中的格式,然後儲存或者輸出到用戶端就完成了匯出Excel的功能了。

對於第一步中的XML代碼我們要進行一些修改,因為這是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">  <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>

到目前為止,這個代碼還沒有實際的用處。我們將這個代碼copy到建立的xslt檔案中,並將xslt的一些文法加入到上面的代碼中,最後xslt檔案將是這個樣子:

<?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>

儲存這個xslt檔案。

第三步:

編寫.net後台代碼,我是通過一個按鈕事件觸發匯出的。代碼如下:

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();}

總結:

其實這個方法的核心就是利用.net的xslt轉換功能將xml以一種特殊格式輸出出去。而這種格式可以利用Excel軟體自動產生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.