← 返回所有博客文章

多文章中都提到 ActiveReports 优越的性能和文件交换功能。所以我将省略一些基础知识。

这篇文章将阐述许多用户都会遇到的问题:“如何在导出报表到 excel 文件时隐藏 Page Header 区域”或者“怎样在导出 excel 文件时是 Page Header 只显示一次”。

在开始之前,我们来看看为什么在导出 excel 文件时会出现这个问题。
每一种导出格式都有一些独有的特性,例如,报表中页面中的所有区域都会导出到特定格式文件。所以导出的文件中就会理所当然的包含报表中的所有区域。这种规则适用于到多数导出格式。但是,由于 excel 中没有页的概念,所以我们将无法得到预期的结果。

因此,我们在导出报表到 excel 文件时,所有报表页面将导出到一个sheet中。结果将是在 excel 文件中多次出现 Page Header 。

解决方法:
在 PageHeader_Format 事件中通过逻辑代码判断是否为第一页,如果不是就设置其 Visible 属性为 False。进而隐藏 Page Header。
代码如下:

  1. private void PageHeader_Format(object sender, EventArgs e)  
  2.      {  
  3.        {  
  4.          if (this.PageNumber > 1)  
  5.          {  
  6.            this.PageHeader.Visible = false;  
  7.          }  
  8.      }
复制代码

这是另外一个问题就出现了,许多用户只想在导出时实现上述效果,而在预览报表时每一页都显示 PageHeader。但是在报表渲染到 Viewer 之后,报表文件是只读的,不可操作的。

下面是完整的解决方案:
解决方法为,我们需要在导出报表时重新运行一次报表。
1.    当报表第一次运行时,Page Header 的 Visible 属性都设置为 true来显示 Page Header。
2.    在我们需要导出报表到 Excel 文件时,重新运行一次报表,设置ShowPageHeaderOnFirstPageOnly 为 true,从而实现Page Header 仅展示一次的效果。
下面为示例代码:

 
DataFieldExpressionsReport rpt = new DataFieldExpressionsReport();

            rpt.ShowPageHeaderOnFirstPageOnly = false;

            rpt.Run();

            viewer1.Document = rpt.Document;





            DataFieldExpressionsReport rpt1 = new DataFieldExpressionsReport();



            rpt1.ShowPageHeaderOnFirstPageOnly = true;

            rpt1.Run();

            XlsExport exp = new XlsExport();

            exp.Export(rpt1.Document, "Test.xls");



            System.Diagnostics.Process.Start("Test.xls");

复制代码