当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET使用xslt将xml转换成Excel

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

2017年12月12日  | 移动技术网IT编程  | 我要评论

祝甸吧,非诚勿扰孙雅莉牵手,世界经济

序:

  最近在给客户做一个管理系统的时候,客户提出要将查询结果导出到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软件自动生成

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网