最近在公司做报表.
有一种方法是利用ORACLE的存储过程返回XML,然后利用XSLT转换为EXCEL.
以下是某个存储过程返回的XML:
<?
xml
version
="1.0"
encoding
="UTF-8"
?>
< ROOT >
< container_detail >
< ROW CONTAINER_NO ="DFSU7666883 " />
< ROW CONTAINER_NO ="DFSU7666836 " />
< ROW CONTAINER_NO ="DFSU7666800 " />
< ROW CONTAINER_NO ="DFSU7666878 " />
< ROW CONTAINER_NO ="DFSU7666815 " />
< ROW CONTAINER_NO ="DFSU7666857 " />
< ROW CONTAINER_NO ="DFSU7666899 " />
< ROW CONTAINER_NO ="DFSU7666820 " />
< ROW CONTAINER_NO ="DFSU7666841 " />
< ROW CONTAINER_NO ="DFSU7666862 " />
</ container_detail >
</ ROOT >
< ROOT >
< container_detail >
< ROW CONTAINER_NO ="DFSU7666883 " />
< ROW CONTAINER_NO ="DFSU7666836 " />
< ROW CONTAINER_NO ="DFSU7666800 " />
< ROW CONTAINER_NO ="DFSU7666878 " />
< ROW CONTAINER_NO ="DFSU7666815 " />
< ROW CONTAINER_NO ="DFSU7666857 " />
< ROW CONTAINER_NO ="DFSU7666899 " />
< ROW CONTAINER_NO ="DFSU7666820 " />
< ROW CONTAINER_NO ="DFSU7666841 " />
< ROW CONTAINER_NO ="DFSU7666862 " />
</ container_detail >
</ ROOT >
现要求,将CONTAINER_NO取出,转为EXCEL时要每四列就换行,如下:
Booking Confirmation Unit Details
DFSU7666883 DFSU7666836 DFSU7666800 DFSU7666878
DFSU7666815 DFSU7666857 DFSU7666899 DFSU7666820
DFSU7666841 DFSU7666862
DFSU7666883 DFSU7666836 DFSU7666800 DFSU7666878
DFSU7666815 DFSU7666857 DFSU7666899 DFSU7666820
DFSU7666841 DFSU7666862
在利用XSLT处理的时候遇到难题,半天解决不了.求助PM,一会儿就解决了,强哈~
部分如下:
<
xsl:for-each
select
="//ROW"
>
< xsl:if test ="position() mod 4 =1" >
< Row >
< Cell ss:StyleID ="s22" >
< Data ss:Type ="String" >
< xsl:value-of select ="@CONTAINER_NO" />
</ Data >
</ Cell >
< xsl:for-each select ="following::*[position()<=3]" >
< Cell ss:StyleID ="s22" >
< Data ss:Type ="String" >
< xsl:value-of select ="@CONTAINER_NO" />
</ Data >
</ Cell >
</ xsl:for-each >
</ Row >
</ xsl:if >
</ xsl:for-each >
< xsl:if test ="position() mod 4 =1" >
< Row >
< Cell ss:StyleID ="s22" >
< Data ss:Type ="String" >
< xsl:value-of select ="@CONTAINER_NO" />
</ Data >
</ Cell >
< xsl:for-each select ="following::*[position()<=3]" >
< Cell ss:StyleID ="s22" >
< Data ss:Type ="String" >
< xsl:value-of select ="@CONTAINER_NO" />
</ Data >
</ Cell >
</ xsl:for-each >
</ Row >
</ xsl:if >
</ xsl:for-each >
还有得学哈~~加油加油!
转载于:https://blog.51cto.com/nikoo/52992