Foxtable(狐表)用户栏目专家坐堂 → 请教:在调用Excel模板打印报表时怎样打印一个表中不连续的多行?


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

主题:请教:在调用Excel模板打印报表时怎样打印一个表中不连续的多行?

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
请教:在调用Excel模板打印报表时怎样打印一个表中不连续的多行?  发帖心情 Post By:2010/4/23 20:49:00 [显示全部帖子]

   如题,在以前的时候,我记得使用Excel模板打印时,只能在表中选定连续的多行(手工选定或者用代码选定),然后再调用模板打印。若果要打印不连续的多行,就必须先筛选出想要打印的行,然后再选定筛选出的所有行。

   总感觉这样比较麻烦,也比较别扭。现在又几个月过去了,是不是能有更简便的方法来实现这个功能?即在调用Excel模板的时候,直接利用表中符合条件的不连续的多行生成EXCEL报表?
 

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2010/4/23 22:48:00 [显示全部帖子]

仍然有个问题,一个模板中设置的筛选条件是相对固定的,用代码改非常麻烦!

但实际情况是,对于同一个模板文件,每次打印的行是不同的,筛选条件不是固定的。总觉得应该有简便的解决办法。

如果在调用模板生成报表之前能够设定条件(即生成的报表包括哪些行),就比较方便了。在帮助中没有查到怎样设置。

例如:我要打印Table中选择框选中的行,调用Excel模板生成报表,该怎么实现?

[此贴子已经被作者于2010-4-23 23:23:37编辑过]

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2010/4/24 6:58:00 [显示全部帖子]

以下是引用czy在2010-4-24 1:55:00的发言:


如果是这种条件根本就无需怎么设置,在模板中加入<ALL>,筛选后打印报表自然就是表中筛选的结果。

     例如我要打印Table中选择框选中的行,调用Excel模板生成报表。目前的实现方法是,先把表中筛选一下,只保留选择框选中的行,然后打印,打印后再恢复没筛选之前的表,这样的实现方法虽然可以实现,但比较曲折,比较麻烦。
     我是想知道,有无简便的办法,直接根据Table中符合条件的行,或者根据一个行集合,生成Excel报表(好像目前生成Excel报表都是根据表中的选择区域生成的)。


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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2010/4/25 7:17:00 [显示全部帖子]

     其实我们换个角度来解决问题,也完全可以,甚至更简单。在利用Excel模板生成报表的时候,我们都是先用select选定表的一块连续的区域,例如:tt.Select(0,1,tta.Rows.Count-1,tta.cols.count-1),然后再定义Book,定义Sheet,最后利用Book的Build方法生成报表。

   目前利用Table的select方法只能在表中选定一块连续的区域,进而生成Excel报表。目前的Excel报表本身的功能已经非常强大,但如果这一点不解决,会限制Excel报表的方便性!这种需求是很常用的,例如打印员工档案卡的时候,我不一定非要打印连续的多张,可能我需要打印符合一定条件的几张,或者我用表的复选框根据需要选几张打印。目前我每次都要先筛选一下,然后用select选定筛选后的所有行,而且这样打印后还要再重新再恢复打印前的筛选条件,不但罗索,而且会影响执行的效率!我想知道,有没有办法选定不连续的区域,例如:选择符合一定筛选条件的行,或者选择复选框被选中的行,然后利用这些行生成Excel报表?不知这样是否容易实现?
   
[此贴子已经被作者于2010-4-25 7:22:25编辑过]

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2010/4/25 12:08:00 [显示全部帖子]

以下是引用lxl在2010-4-25 10:04:00的发言:

选择不连续的行不是做不到,但是这样做会牺牲更多别的功能。
table选定区域的相关一些功能会变得不好用那。
比如处理以前选中连续的几行
处理时只需要 For i As Integer = CurrentTable.TopRow To CurrentTable.BottomRow
如果选中行变的不连续,实现这样的功能就会很麻烦。

不过, 你说的加一个复选框辅助列 来实现不连续打印很容易实现,也不需要筛选。
只需要在excel模板里面添加打印条件 print = true 就可以了


     这种我知道,但在有时候是不太方便的。例如,我在打印员工档案卡时,有多种打印方式:打印所有行;打印当前行;打印选定的多行等等,如果照这种思路解决,每种不同的条件打印,就需要一个独立的Excel模板文件,这是很不方便的,(好像用报表事件也不是太方便),所以我希望有更好的解决办法。
    如果把目前的select直接改成允许选择不连续的区域,好像会带来副作用。但我的建议是,能否采用以下两种办法中的一种,或者谁有更好的解决办法:
(1)能否直接根据一个行集合生成Excel报表,这种方式下生成Excel报表不再使用select选择行(为了和以前的程序保持兼容,原来的根据select选择行生成Excel报表的方式可以继续保留,这并不冲突!)
(2)能否再针对Excel报表专门有一个方法来选择Table中不连续的多行,然后根据这不连续的多行生成Excel报表。


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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2010/4/25 13:25:00 [显示全部帖子]

以下是引用lxl在2010-4-25 13:07:00的发言:

不用设计多个模板
可以把打印条件做成标记:  <打印条件>

然后根据不用的情况执行
Book.Marks.Add("打印条件","print = true")
Book.Build()
或者
Book.Marks.Add("打印条件","true")
Book.Build()

谢谢!我试试。

[此贴子已经被作者于2010-4-25 13:25:12编辑过]

 回到顶部