xslt导出excel,动态最后一行生成公式

        xslt导出excel,动态最后一行生成公式

       由于最近工作中需要实现大数据量(10万以上)导出Excel,所以学习xslt去实现;把这个过程中的关于动态实现最后一行插入公式的方法分享一下:

需求:导出的excel中可能用户会修改数据或增加数据,然后对一列去统计求和

        在模板中sheet的数据循环完后加上统计这行,如:

  <xsl:for-each select="DATAS/DATA">
   <Row ss:AutoFitHeight="0" ss:Height="15">
     <Cell><Data ss:Type="String"> </Data></Cell>
    <Cell ss:StyleID="s35"><Data ss:Type="Number"><xsl:value-of select="fe_riPremNet"/></Data></Cell>
    <Cell><Data ss:Type="String"> </Data></Cell>
   </Row>
   </xsl:for-each>
   <Row ss:AutoFitHeight="0" ss:Height="15">
    <Cell ss:StyleID="s33"><Data ss:Type="String">总计</Data></Cell>
    <Cell ss:StyleID="s32"><xsl:attribute name="ss:Formula">=SUM(R[-<xsl:value-of select="size"/>]C:R[-1]C)</xsl:attribute><Data ss:Type="Number"></Data></Cell>
    <Cell><Data ss:Type="String"> </Data></Cell>
   </Row>

其中公式=SUM(R[-<xsl:value-of select="size"/>]C:)

公式说明:1.size是从后台统计每一个sheet页多少数据;

                  2.R表示行,C表示列;RC表示公式所在的本单元格;

                  3.[-1]表示相对于本单元格的前一列或前一行;

                  4.如R[-1]C就是表示同列的上一个单元格。

 

定义的xml:

 

<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<ROOT>
    <SHEET>
        <DATAS>                    
            <DATA>
                <fe_riPremNet>22</fe_riPremNet>
                <ic_riRate>2</ic_riRate>
                <ic_clmMoney>22</ic_clmMoney>
            </DATA>
            ......
            <DATA>
                <fe_riPremNet>22</fe_riPremNet>
                <ic_riRate>2</ic_riRate>
                <ic_clmMoney>22</ic_clmMoney>            
            </DATA>
        </DATAS>
        <sheet_code>CSSQ</sheet_code>
        <size>5</size>
    </SHEET>
</ROOT>

 

<DATA>一条数据, <DATAS>是数据的集合,<SHEET>一个sheet,<ROOT>根节点;(注:定义的有点复杂,这是截取的部分,实际中因为导出的excel中有4个不同模板,

所以分为不同的<SHEET>;<sheet_code>是模板中去判断使用哪个sheet页模板)

 

最后,有没有大侠直接在模板中实现动态实现动态公式,请指教!

开始的想法就是用position()获取循环次数,然后传给公式,但xslt中定义参数和变量都要在一个<xsl:template>下而没实现,所以使用后台统计数据条数;

我同事使用sunifs()函数去实现,但他实现是要去判断前一列是否有一个固定值,感觉很难懂,如:

<Cell ss:StyleID="s101" ss:Formula="=SUMIFS(C,C[-28],&quot;S&quot;)+SUMIFS(C,C[-28],&quot;Y&quot;)"><Data ss:Type="Number"></Data></Cell>

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值