Foxtable(狐表)用户栏目专家坐堂 → 利用模板分批输出


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

主题:利用模板分批输出

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


加好友 发短信
等级:幼狐 帖子:88 积分:819 威望:0 精华:0 注册:2013/10/15 13:25:00
利用模板分批输出  发帖心情 Post By:2013/11/26 10:26:00 [只看该作者]

请教:如何利用模板文件实现分批输出?(EXCEL报表)

数据表有3000条记录,每条记录都是一个产品标签的内容。

现在希望每次输出其中的100条记录到EXCEL报表中,分多次输出全部的3000条记录。

 


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/26 10:32:00 [只看该作者]

呵呵,我无法理解你的问题,如果是100行一页,那么指定每页的行数即可:

http://www.foxtable.com/help/topics/0203.htm

 

如果不是分页,那么每次输出100行是什么意思?

 

 


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/26 10:40:00 [只看该作者]

如果只是简单的一次打印100行,分成30次打印,那么:

1、设计模版的时候,不要指定打印条件。

2、用下面的代码打印,要点已经给你标出来了:

 

 

Dim cnt As Integer = 100 '每次打印的行数
For i As Integer = 0 To Tables("订单").Rows.count -1 Step cnt
    Dim ed As Integer = math.min(i + cnt - 1, Tables("订单").Rows.count -1)
    Tables("订单").Select(i,0,ed,0)  '选定本次打印的100行

   
    Dim Book As New  XLS.Book(ProjectPath &  "Attachments\模版.xls") '开始基于模版打印
    Dim fl As  String = ProjectPath  &  "Reports\模版.xls"
    Book.Build() '生成细节区
    Book.Save(fl) '保存工作簿
    Dim Proc As  New  Process  '打开工作簿
    Proc.File = fl
    Proc.Start()
    proc.WaitForExit  '等到关闭本次生成的excel报表文件才打印下一个100行
Next


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


加好友 发短信
等级:幼狐 帖子:88 积分:819 威望:0 精华:0 注册:2013/10/15 13:25:00
  发帖心情 Post By:2013/11/26 10:49:00 [只看该作者]

这个问题还是11月14号所求助问题的继续(麻烦大侠参考当时求助情况)。

数据表每条记录都有图片,记录数多了就不能正常输出,少了就可以正常输出。

11月14号时,图片文件有5M大小,最多可以正常输出30条记录左右。现在图片文件500K大小,最多可以正常输出100条记录左右,再多就不行了。

所以想试试分批输出,每输出一次做一次保存,再接着输出下一次,直至数据表全部记录输出完成。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/26 11:04:00 [只看该作者]

那么3楼就是的了

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


加好友 发短信
等级:幼狐 帖子:88 积分:819 威望:0 精华:0 注册:2013/10/15 13:25:00
  发帖心情 Post By:2013/11/26 12:02:00 [只看该作者]

谢谢指点。

刚才试了一下,还是不行。

问题是不是出在Book.Build() 生成细节区上?代码:

Dim cnt As Integer = 100 '每次打印的行数
For i As Integer = 0 To Tables("订单").Rows.count -1 Step cnt
    Dim ed As Integer = math.min(i + cnt - 1, Tables("订单").Rows.count -1)
    Tables("订单").Select(i,0,ed,0)  '选定本次打印的100行
    
    Dim Book As New  XLS.Book(ProjectPath &  "Attachments\模版.xls") '开始基于模版打印
    Dim fl As  String = ProjectPath  &  "Reports\模版.xls"
    Book.Build() '生成细节--->这里生成细节区所对应的数据表任然是含有3000条记录的大表,所以输出时总是显示爆内存。如果只是针对选定100条记录的小表生成细节区,是不是应该没有问题?能不能考虑动态修改打印条件,每次按顺序生成100条记录的细节区,输出,保存,最后再将全部输出的EXCEL报表合并成一个报表?请指点。先谢谢了。
    Book.Save(fl) '保存工作簿
    Dim Proc As  New  Process  '打开工作簿
    Proc.File = fl
    Proc.Start()
    proc.WaitForExit  '等到关闭本次生成的excel报表文件才打印下一个100行
Next

 


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/26 12:11:00 [只看该作者]

动态设置打印条件应该可行,参考这里http://www.foxtable.com/help/topics/2626.htm

 回到顶部