为ReportViewer创建自定义导出到Excel(rdlc)

时间:2010-08-16 14:20:39

标签: .net reportviewer

我有兴趣为ReportViewer中的报表创建自定义“导出到Excel”选项。这主要是因为我想要pdf被剥夺,我通过以下方式做到了:

 ReportViewer1.ShowExportControls = false;

由于无法在ReportViewer中禁用任何特定的导出功能(例如pdf但不是excel)。这是我(稍微)修改后的代码。理想情况下,我想要一些类似于以前的导出选项,我可以将文件保存到我想要的任何位置。

编辑:代码有效,但我如何修改文件流,以便不会自动保存文件,我可以提示用户,以便他们可以保存到他们想要的任何位置?

protected void btnExportExcel_Click(object sender, EventArgs e)
{
    Warning[] warnings;
    string[] streamids;
    string mimeType;
    string encoding;
    string extension;

    byte[] bytes = ReportViewer1.LocalReport.Render(
       "Excel", null, out mimeType, out encoding,
        out extension,
       out streamids, out warnings);

    FileStream fs = new FileStream(@"c:\output.xls",
       FileMode.Create);
    fs.Write(bytes, 0, bytes.Length);
    fs.Close();

}

4 个答案:

答案 0 :(得分:30)

只是抬头......接受的答案将呈现为XLS文件,这是原始海报所要求的。

但是,您现在也可以导出到XLSX。您必须将format方法的"Excel"参数从"EXCELOPENXML"更改为"Excel"

要获取可能值的完整列表,您可以调用Render()。当我在报表查看器实例上运行它时,我得到了以下可能的选项:

"EXCELOPENXML" "IMAGE" "PDF" "WORD" "WORDOPENXML" {{1}}

我发现很难确定你需要为格式传递什么。如果你问我,MSDN会很难记录这个。

答案 1 :(得分:19)

我根据微软关于ReportViewer和Google搜索的文档将这些内容整合在一起,以防有人遇到与我类似的问题:

protected void ExportExcel_Click(object sender, EventArgs e)
{
    Warning[] warnings;
    string[] streamids;
    string mimeType;
    string encoding;
    string extension;
    string filename;

    byte[] bytes = ReportViewer1.LocalReport.Render(
       "Excel", null, out mimeType, out encoding,
        out extension,
       out streamids, out warnings);

    filename = string.Format("{0}.{1}", "ExportToExcel", "xls");
    Response.ClearHeaders();
    Response.Clear();
    Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
    Response.ContentType = mimeType;
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
}

答案 2 :(得分:1)

如果你想隐藏一个导出选项(虽然听起来好像你发现自定义导出有用),这里有两个选项:

选项A.使用CSS隐藏导出选项:

  1. 在浏览器的F12调试窗口中,找到要导出的HTML DOM元素,右键单击它并复制唯一的CSS标识符。
  2. 将此项添加到CSS文件中(将CSS选择器替换为剪贴板的上下文):

    #ReportViewer1_ctl05_ctl04_ctl00_Menu > div:nth-child(3) 
    {
        display:none;
    }
    
  3. 在引用这样一个模糊的CSS选择器时,建议小心,因为这是hackish。

    选项B.使用代码隐藏来隐藏导出选项

    1. 将以下方法作为后端代码添加到.aspx.cs文件中。

      public void DisableUnwantedExportFormat(ReportViewer ReportViewerID, string strFormatName)
      {
          FieldInfo info;
          foreach (RenderingExtension extension in ReportViewerID.ServerReport.ListRenderingExtensions())
          {
              if (extension.Name == strFormatName)
              {
                  info = extension.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic);
                  info.SetValue(extension, false);
              }
          }
      }
      
    2. 选择相关的Reportviewer控件并按F4。

    3. 在“属性”窗口中,单击“事件”图标,然后双击PreRender项以生成ReportViewer1_PreRender方法,我假设您的reportViewer控件ID是ReportViewer1,编辑您的方法如下:

      protected void ReportViewer1_PreRender(object sender, EventArgs e)
      {
          DisableUnwantedExportFormat((ReportViewer)sender,"Excel");
      }
      
    4. (来源:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/74dad27b-ef7e-4b9b-8922-666b317b3094/how-to-hide-pdf-in-export-option-in-ssrs-reportviewer?forum=sqlreportingservices和@ valik的链接仅回答。)

答案 3 :(得分:0)

有一种方法可以在报告查看器中禁用特定导出。见下文。

Step 1: Add OnPreRender event for the report viewer
Step 2: Inside the ReportViewer_PreRender function add the following code

DisableReportExportType.HideUnwantedExportFormat((ReportViewer)sender, "PDF"); // Disables PDF
DisableReportExportType.HideUnwantedExportFormat((ReportViewer)sender, "WORDOPENXML"); //Disables Word
DisableReportExportType.HideUnwantedExportFormat((ReportViewer)sender, "EXCELOPENXML"); //Disables Excel

根据需要使用上述内容。希望这是您正在寻找的内容。