冯东的博客

每天学一点,不断进取
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

如何使导出的excel和报表分页设置不一样

Posted on 2010-10-28 17:00  冯东  阅读(1356)  评论(0编辑  收藏  举报

我们以列表为例,默认的行数是20,超过20行,列表就会分页显示,如果我们导出excel,那么excel也会分成sheet导出,每个sheet是20行。页面展现时20行一页感觉可以,但是用户经常会提要把所有的数据导出到一个sheet中。坛子里也经常有人问怎么实现。我这里列出两种方式,第一种需要两张报表实现,第二种用一张报表实现。

不管采用哪种方法思路都是一样的,我先来介绍一下我的实现思路:同一个列表设置的分页行数和导出excel的分sheet的条件是一样的,这是我们没法改变的,但是我们可以利用两个列表来实现,展现和导出的分页条件不一样,一个list是用来报表展现的,另一个list用来导出。

第一种方法:两张报表,利用穿透钻取来实现导出excel

以Cognos Sample中Sales and Marketing Zh (cube)作为我们演示的package,打开ReportStudio创建一个简单报表report_for_html只包含一个简单的列表,让数据展现时存在分页即可。如下图所示:

 

此时我们将该报表另存为一下,比如report_for_excel,结构都保持一致,只是将列表的分页设置为65535(可以不做此限制,但是如果不做限制,当导出数据超过65535时导出的excel因为单个sheet过大而不能打开)。

 

打开report_for_html这张报表,在工具箱中拖一个文本项目到页面中,并将文本内容设置为“导出Excel”,选中文本项,点击追溯定义,为其设置到report_for_excel的追溯定义。

将报表设置为report_for_excel,格式选中Excel 2007或者其他格式。选中在新窗口中打开,点击确定,最终效果如下图所示

 

运行效果就是报表可以存在分页,导出的excel没有分页,如下图所示

 

注意事项:当报表存在过滤条件时,追溯定义中也必须把参数传递过去。

 

第二种方法,在一个报表中实现。思路如下:还是两个列表,利用条件样式判断当前的输出模式,若为html则显示展现的list,若为excel则显示导出excel的list。

我们还选用和上次一样的列表,并复制一份,假定上面的list用来报表展现,下面的list用于导出excel,如下图所示:

 

进入条件资源管理器新建一个字符串变量,将表达式设置为ReportOutput(),该函数返回输出格式的名称。可能返回的值包括: CSV、HTML、layoutDataXML、MHT、PDF、rawXML、singleXLS、spreadsheetML、XLS、XML 和 XLWA。新建一个值为HTML,我这里演示只建了一个,可以在创建多个,这样可以控制的更细。

返回到页面资源管理器,为两个list设置样式变量为新建的“字符串1”,设置当值为“HTML”是,输出excel的list的方框类型为无,当值为其他时展现html的list的方框类型为无。

运行报表,显示分页展现的数据,选择导出excel时导出的excel则没有分sheet展现

操作演示的视频放到论坛里了,下载地址如下

http://www.cognoschina.net/club/thread-10061-1-1.html