以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  利用模板分批输出  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=42921)

--  作者:cdwanghc
--  发布时间:2013/11/26 10:26:00
--  利用模板分批输出

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

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

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

 


--  作者:狐狸爸爸
--  发布时间:2013/11/26 10:32:00
--  

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

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

 

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

 

 


--  作者:狐狸爸爸
--  发布时间: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
--  发布时间:2013/11/26 10:49:00
--  

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

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

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

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


--  作者:狐狸爸爸
--  发布时间:2013/11/26 11:04:00
--  
那么3楼就是的了
--  作者:cdwanghc
--  发布时间: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
--  发布时间:2013/11/26 12:11:00
--  
动态设置打印条件应该可行,参考这里http://www.foxtable.com/help/topics/2626.htm