当前位置:Gxlcms > asp.net > ASP.NET使用xslt将xml转换成Excel

ASP.NET使用xslt将xml转换成Excel

时间:2021-07-01 10:21:17 帮助过:39人阅读

序:

  最近在给客户做一个管理系统的时候,客户提出要将查询结果导出到Excel。对于还是实习生的我倍感压力,于是找了点资料。网上有个示例,其中方法十分简单。于是照猫画虎,把方法和心得与大家分享。OK,Let`s go

第一步:

  创建一个Excel文件(就是 普通的Excel),在第一个单元格输入“city”,然后选择“另存为”,此时弹出保存窗口。注意:将保持格式选择为“XML 表格(*.xml)”,点击保存。完毕后用记事本打开这个Excel文件。你将看到如下的代码

  1. <?xml version="1.0"?>
  2. <?mso-application progid="Excel.Sheet"?>
  3. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  4. xmlns:o="urn:schemas-microsoft-com:office:office"
  5. xmlns:x="urn:schemas-microsoft-com:office:excel"
  6. xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  7. xmlns:html="http://www.w3.org/TR/REC-html40">
  8. <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  9. <Author>MC SYSTEM</Author>
  10. <LastAuthor>MC SYSTEM</LastAuthor>
  11. <Created>2009-05-28T16:20:57Z</Created>
  12. <Company>MC SYSTEM</Company>
  13. <Version>11.5606</Version>
  14. </DocumentProperties>
  15. <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  16. <WindowHeight>11250</WindowHeight>
  17. <WindowWidth>18180</WindowWidth>
  18. <WindowTopX>120</WindowTopX>
  19. <WindowTopY>75</WindowTopY>
  20. <ProtectStructure>False</ProtectStructure>
  21. <ProtectWindows>False</ProtectWindows>
  22. </ExcelWorkbook>
  23. <Styles>
  24. <Style ss:ID="Default" ss:Name="Normal">
  25. <Alignment ss:Vertical="Center"/>
  26. <Borders/>
  27. <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
  28. <Interior/>
  29. <NumberFormat/>
  30. <Protection/>
  31. </Style>
  32. </Styles>
  33. <Worksheet ss:Name="Sheet1">
  34. <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
  35. x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
  36. <Row ss:>
  37. <Cell><Data ss:Type="String">org</Data></Cell>
  38. </Row>
  39. </Table>
  40. <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
  41. <Unsynced/>
  42. <Selected/>
  43. <Panes>
  44. <Pane>
  45. <Number>3</Number>
  46. <ActiveRow>3</ActiveRow>
  47. <ActiveCol>1</ActiveCol>
  48. </Pane>
  49. </Panes>
  50. <ProtectObjects>False</ProtectObjects>
  51. <ProtectScenarios>False</ProtectScenarios>
  52. </WorksheetOptions>
  53. </Worksheet>
  54. <Worksheet ss:Name="Sheet2">
  55. <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
  56. x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
  57. <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
  58. <Unsynced/>
  59. <ProtectObjects>False</ProtectObjects>
  60. <ProtectScenarios>False</ProtectScenarios>
  61. </WorksheetOptions>
  62. </Worksheet>
  63. <Worksheet ss:Name="Sheet3">
  64. <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
  65. x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
  66. <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
  67. <Unsynced/>
  68. <ProtectObjects>False</ProtectObjects>
  69. <ProtectScenarios>False</ProtectScenarios>
  70. </WorksheetOptions>
  71. </Worksheet>
  72. </Workbook>

  其实这个就是将XML转换成Excel最关键的部分。实际上这就是Excel对应的XML格式。也就是说按照这个格式来写一个XML文件,然后用Excel打开,Excel会将这个文件以Excel的样子正确的现实出来。

第二步:

  在.net项目中添加一个xslt文件。学过xslt的朋友都知道通过xslt可以将xml转换成其他的格式。可能有的朋友还没有理解我的意思。其实我们通过xslt将xml转换成“第一步”中的格式,然后保存或者输出到客户端就完成了导出Excel的功能了。

对于第一步中的XML代码我们要进行一些修改,因为这是Excel自动生成的,其中包含了大量的无用信息。修改后的代码如下:

  1. <?xml version="1.0"?>
  2. <?mso-application progid="Excel.Sheet"?>
  3. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  4. xmlns:o="urn:schemas-microsoft-com:office:office"
  5. xmlns:x="urn:schemas-microsoft-com:office:excel"
  6. xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  7. xmlns:html="http://www.w3.org/TR/REC-html40">
  8. <Worksheet ss:Name="Sheet1">
  9. <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
  10. x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
  11. <Row ss:>
  12. <Cell>
  13. <Data ss:Type="String">
  14. city <!--还记得吗?这是第一步中输入的city -->
  15. </Data>
  16. </Cell>
  17. </Row>
  18. </Table>
  19. </Worksheet>
  20. </Workbook>

到目前为止,这个代码还没有实际的用处。我们将这个代码copy到创建的xslt文件中,并将xslt的一些语法加入到上面的代码中,最后xslt文件将是这个样子:

  1. <?xml version="1.0"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:template match="/">
  4.   
  5. <?mso-application progid="Excel.Sheet"?>
  6. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  7. xmlns:o="urn:schemas-microsoft-com:office:office"
  8. xmlns:x="urn:schemas-microsoft-com:office:excel"
  9. xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  10. xmlns:html="http://www.w3.org/TR/REC-html40">
  11. <Worksheet ss:Name="Sheet1">
  12. <Table>
  13.    <xsl:for-each select="*">
  14.    <Row>
  15.    <Cell>
  16. <Data ss:Type="String">
  17. <xsl:value-of select="."/>
  18. </Data>
  19. </Cell>
  20.    <Cell>
  21. <Data ss:Type="String">
  22. <xsl:value-of select="."/>
  23. </Data>
  24. </Cell>
  25. </Row>
  26. </xsl:for-each>
  27. </Table>
  28. </Worksheet>
  29. </Workbook>
  30. </xsl:template>
  31. </xsl:stylesheet>

保存这个xslt文件。

第三步:

编写.net后台代码,我是通过一个按钮事件触发导出的。代码如下:

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. XmlDocument xdoc = new XmlDocument();
  4. xdoc.LoadXml("<records><record><org>北京</org></record></records>");
  5. XslCompiledTransform xct = new XslCompiledTransform();
  6. xct.Load(Application.StartupPath+"\\excel.xslt");
  7. XmlTextWriter writer = new XmlTextWriter("output.xls", null);
  8. writer.WriteProcessingInstruction("xml", "version="1.0"");
  9. xct.Transform(xdoc, null,writer);
  10. writer.Close();
  11. }

总结:

其实这个方法的核心就是利用.net的xslt转换功能将xml以一种特殊格式输出出去。而这种格式可以利用Excel软件自动生成

人气教程排行