以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  EXCEL报表输出的一个奇怪现象,百思不得其解。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=140805)

--  作者:一丁
--  发布时间:2019/9/14 23:12:00
--  EXCEL报表输出的一个奇怪现象,百思不得其解。
    做了一个EXCEL报表模板,是一个卡片式的报表,从父表和一个关联的子表中取数,父表中的1条记录与关联子表中相关记录生成1张报表卡片。在使用中,选中父表中的某1条记录,然后生成报表,一切正常,会生成一张正确的卡片。
    问题是这样的,父表中的记录不少,如果每生成一张报表卡片都要去点击1条记录,操作起来很麻烦,效率很低,于是设计了一个批量输出的按钮,按钮的目的是在父表中选定多行,然后生成选定行的报表卡片。按钮代码如下:
With Tables("户主") \'父表
    For  i As Integer = .TopPosition To .BottomPosition
        .Position = i
        Dim Book As New XLS.Book(ProjectPath & "Attachments\\惠民政策卡.xls") \'打开模板
        Dim fl As String = ProjectPath & "Reports\\惠民政策卡_" &  .Current("姓名") & ".xls"
        Book.Build() \'生成报表
        Book.Save(fl) \'保存报表
    Next
End With
MessageBox.Show("选定记录批量输出完毕!")

问题来了:当选择输出父表中所有记录的时候,是用鼠标从第一行开始拖动选择到最后一行,然后执行上面的"批量输出"代码,那么生成的第1张报表卡片中,本来只应是第1条记录的数据,结果却是父表中所有录的数据!但从第2张报表开始则是正确的,也就是每1张报表卡片中只有对应的1条记录的数据.经反复多次测试,发现一个更奇怪的现象:如果选择多行操作时,是从最后一行开始用鼠标拖动到第1行,然后再执行上面的"批量输出"代码,则前述的问题不出现,所有记录输出的卡片都是正确的.
    请狐爸帮忙看看是咋了?该不会是软件BUG吧?
    顺便把报表模板附上.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:惠民政策卡.xls




[此贴子已经被作者于2019/9/14 23:15:43编辑过]

--  作者:有点蓝
--  发布时间:2019/9/15 16:28:00
--  
正常,改改
With Tables("户主") \'父表
    Dim i1 As Integer = .TopPosition
    Dim i2 As Integer = .BottomPosition
    .Position = i2
    .Position = i1
    For i As Integer = i1 To i2
        .Position = i
        Dim Book As New XLS.Book(ProjectPath & "Attachments\\惠民政策卡.xls") \'打开模板
        Dim fl As String = ProjectPath & "Reports\\惠民政策卡_" &  .Current("姓名") & ".xls"
        Book.Build() \'生成报表
        Book.Save(fl) \'保存报表
    Next
End With
MessageBox.Show("选定记录批量输出完毕!")

--  作者:一丁
--  发布时间:2019/9/16 11:21:00
--  
这是为什么呢图片点击可在新窗口打开查看
--  作者:有点蓝
--  发布时间:2019/9/16 11:38:00
--  
因为.Position默认就是选中的第一行,第一次还是设置.Position为选中的第一行,相当于Position没有变化,所以第一次还是选中所有行
--  作者:一丁
--  发布时间:2019/9/16 11:41:00
--  
谢谢!