ASP.NET使用xslt將xml轉(zhuǎn)換成Excel
來源:易賢網(wǎng) 閱讀:1209 次 日期:2016-08-08 14:59:01
溫馨提示:易賢網(wǎng)小編為您整理了“ASP.NET使用xslt將xml轉(zhuǎn)換成Excel”,方便廣大網(wǎng)友查閱!

本文介紹利用Excel軟件生成格式,提取和精簡之后制作成xslt文件,將xml導(dǎo)入,以xslt為模板,生成新的Excel文件的過程。

序:

最近在給客戶做一個(gè)管理系統(tǒng)的時(shí)候,客戶提出要將查詢結(jié)果導(dǎo)出到Excel。對(duì)于還是實(shí)習(xí)生的我倍感壓力,于是找了點(diǎn)資料。網(wǎng)上有個(gè)示例,其中方法十分簡單。于是照貓畫虎,把方法和心得與大家分享。OK,Let`s go

第一步:

創(chuàng)建一個(gè)Excel文件(就是 普通的Excel),在第一個(gè)單元格輸入“city”,然后選擇“另存為”,此時(shí)彈出保存窗口。注意:將保持格式選擇為“XML 表格(*.xml)”,點(diǎn)擊保存。完畢后用記事本打開這個(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格式。也就是說按照這個(gè)格式來寫一個(gè)XML文件,然后用Excel打開,Excel會(huì)將這個(gè)文件以Excel的樣子正確的現(xiàn)實(shí)出來。

第二步:

在.net項(xiàng)目中添加一個(gè)xslt文件。學(xué)過xslt的朋友都知道通過xslt可以將xml轉(zhuǎn)換成其他的格式。可能有的朋友還沒有理解我的意思。其實(shí)我們通過xslt將xml轉(zhuǎn)換成“第一步”中的格式,然后保存或者輸出到客戶端就完成了導(dǎo)出Excel的功能了。

對(duì)于第一步中的XML代碼我們要進(jìn)行一些修改,因?yàn)檫@是Excel自動(dòng)生成的,其中包含了大量的無用信息。修改后的代碼如下:

<?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è)代碼還沒有實(shí)際的用處。我們將這個(gè)代碼copy到創(chuàng)建的xslt文件中,并將xslt的一些語法加入到上面的代碼中,最后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文件。

第三步:

編寫.net后臺(tái)代碼,我是通過一個(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)生成

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:ASP.NET使用xslt將xml轉(zhuǎn)換成Excel
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)