以文本方式查看主题 - 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吧? 顺便把报表模板附上.
[此贴子已经被作者于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 -- 谢谢! |