ureport2对浮动单元格的合计

本文介绍了在Excel中处理浮动数据时如何正确进行合计计算。遇到单元格数据浮动的情况,使用SUM(D3[A3])可以实现动态合计。另外,当数据每行一条时,合计单元格需将上父格设置为标题栏单元格,如改为B4,以确保合计正确显示。掌握这些技巧能有效提高处理动态数据的效率。

今天做报表的时候遇到了需要对浮动的单元格数据进行一个合计计算,但是直接sum(D3)的话就会出现下面这个情况,没有进行合计而是只有第一个单元格的数据

因为我这个报表的所有数据是跟着站场名称浮动的,所有这个时候合计写成sum(D3[A3])就可以进行合计了。

还有一种浮动合计也会出现下面种情况,浮动是一个单位一条数据,这个时候如果直接加一行写上sum(B5)的话也会出现只有第一行的数据而没有合计,那是因为需要改一下默认的上父格

 只要把合计单元格的上父格改成上面的标题栏单元格,不能是浮动数据的那个单元格。这里改成B4后合计就没有问题。

 

ureport2 中实现多个单元格连续除法运算,需要确保参与运算的单元格数据类型为数值类型,同时要考虑除数不能为零的情况。以下是几种实现方式: #### 直接使用表达式 假设有三个单元格 `$cell1`、`$cell2`、`$cell3` 进行连续除法运算,可以使用如下表达式: ```plaintext if($cell2 != 0 && $cell3 != 0, $cell1 / $cell2 / $cell3, 0) ``` 该表达式表示如果 `$cell2` 和 `$cell3` 都不为零,则进行连续除法运算;否则结果为 0。 #### 处理更多单元格 如果有更多单元格 `$cell1`、`$cell2`、...、`$celln` 进行连续除法运算,表达式可以写成: ```plaintext if($cell2 != 0 && $cell3 != 0 && ... && $celln != 0, $cell1 / $cell2 / ... / $celln, 0) ``` 这里需要根据实际的单元格数量,依次添加除数不为零的判断条件。 #### 使用函数封装 为了使代码更具可读性和可维护性,可以将连续除法运算封装成一个自定义函数。在 ureport2 中可以通过 Java 代码实现自定义函数,然后在表达式中调用。以下是一个简单的 Java 示例: ```java import com.bstek.ureport.definition.value.AbstractValue; import com.bstek.ureport.expression.model.data.ExpressionData; import com.bstek.ureport.expression.model.data.ObjectExpressionData; import com.bstek.ureport.expression.model.data.ObjectListExpressionData; import com.bstek.ureport.expression.model.fun.Function; import java.util.List; public class ContinuousDivisionFunction implements Function { @Override public String name() { return "continuousDivision"; } @Override public Object execute(List<ExpressionData<?>> dataList) { if (dataList == null || dataList.isEmpty()) { return 0; } double result = 0; boolean first = true; for (ExpressionData<?> data : dataList) { if (data instanceof ObjectExpressionData) { Object obj = ((ObjectExpressionData) data).getData(); if (obj instanceof Number) { double num = ((Number) obj).doubleValue(); if (first) { result = num; first = false; } else { if (num == 0) { return 0; } result /= num; } } } else if (data instanceof ObjectListExpressionData) { List<Object> list = ((ObjectListExpressionData) data).getData(); for (Object obj : list) { if (obj instanceof Number) { double num = ((Number) obj).doubleValue(); if (first) { result = num; first = false; } else { if (num == 0) { return 0; } result /= num; } } } } } return result; } } ``` 将上述代码编译打包成 jar 文件,放入 ureport2 的类路径下,然后在表达式中可以这样使用: ```plaintext continuousDivision($cell1, $cell2, $cell3) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伊杰yijie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值