Foxtable(狐表)用户栏目专家坐堂 → ★★★Excel报表的跨记录调用数值问题★★★


  共有9528人关注过本帖树形打印复制链接

主题:★★★Excel报表的跨记录调用数值问题★★★

帅哥哟,离线,有人找我吗?
zoomify
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:209 积分:1695 威望:0 精华:0 注册:2012/7/26 17:50:00
★★★Excel报表的跨记录调用数值问题★★★  发帖心情 Post By:2012/9/16 14:05:00 [只看该作者]

有一个表中有某列记录如下:
页数(页的数量)
2
3
3
4
输出成Excel报表的时候,希望变成页开始的位置(页次),如:
1(第一行是从页次1开始)
3(这个记录是从3开始:1+2)
6(这个记录是从6开始:1+2+3 或者是上一个记录的3+3)
10(这个记录是从10开始:1+2+3+4 或者是上一个记录的6+4)
设置Excel报表公式如下:

<iif(<index>=1,1,[页数-1]+[页数])> 

希望得到:当index是1的时候,页次一定等于1,否则等于上一个记录的值(页次)加上本记录的页数。
但这个公式是有问题的,请问专家正确的设置如何做呢?自己琢磨了很久,还是弄不出来。

[此贴子已经被作者于2012-9-16 16:33:30编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
pyh6918
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1135 积分:11105 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2012/9/16 14:36:00 [只看该作者]

<iif(<index>=1,1,[@表名,页数,-1]+[@表名,页数])> 
 
这样你试一下!

 回到顶部
帅哥哟,离线,有人找我吗?
zoomify
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:209 积分:1695 威望:0 精华:0 注册:2012/7/26 17:50:00
  发帖心情 Post By:2012/9/16 16:31:00 [只看该作者]

楼上说的办法用了还是不行,用代码绕了个弯才搞定,但这样代价很大,每个明细记录都会查询一次数据库。 有没有专家知道怎么做呢,其实就是想知道明细数据扩展的时候,上一条记录的值。

代码解决办法如下:(用范例的出库单报表测试,数量用来模拟需要转变的页次,程序打包到了附件)

 

Select Case e.Book.TempLate
    Case "出库单"
        e.Book.Marks("数量") =""
       
        If e.DataRow IsNot Nothing AndAlso e.Region = "出库明细" Then
            Dim Filter1 As String = "出库单编号 = '" & e.DataRow("出库单编号") & "' and _identify <" &  e.DataRow("_identify")
            Dim yeci As Integer
            yeci=DataTables("出库明细").Compute("Sum(数量)",Filter1)
            If yeci=0 Then
                e.Book.Marks("数量") =1
            Else
                e.Book.Marks("数量") = DataTables("出库明细").Compute("Sum(数量)",Filter1) +1
               
            End If
           
           
        End If
End Select

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.zip


 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/9/17 0:46:00 [只看该作者]

 excel模板的公式被清除,不过听说新版本会增加楼主需要的功能。

 代码的话,也可以精简下的。用到静态变量。

Static sum As Integer = 1

Select Case e.Book.TempLate
    Case "出库单"
        If e.DataRow IsNot Nothing AndAlso e.Region = "出库明细" Then
            e.Book.Marks("数量") = sum
            sum = sum + e.DataRow("数量")
        Else
            e.Book.Marks("数量") = ""
        End If
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/9/17 0:47:00 [只看该作者]

不过静态变量是一直存储的,如果你生成报表多次的话,建议使用全局变量,在生成报表之后,把全局变量赋值为开始的值。

 回到顶部
帅哥哟,离线,有人找我吗?
pyh6918
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1135 积分:11105 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2012/9/17 7:29:00 [只看该作者]

加一列,把上一行的页数取过来。

 回到顶部