.net 创建到Excel for ReportViewer(rdlc)的自定义导出

.net 创建到Excel for ReportViewer(rdlc)的自定义导出,.net,reportviewer,.net,Reportviewer,我对在ReportViewer中为我的报告创建自定义导出到Excel选项感兴趣。这主要是因为我希望解除pdf,我通过以下方式做到了这一点: ReportViewer1.ShowExportControls = false; 因为无法在ReportViewer中禁用任何特定的导出功能(例如pdf但不是excel)。下面是我(稍微)修改过的代码。理想情况下,我希望类似于前面的导出选项,在这里我可以将文件保存到我想要的任何位置 编辑:代码可以工作,但是我需要如何修改Filestream,以便不自动

我对在ReportViewer中为我的报告创建自定义导出到Excel选项感兴趣。这主要是因为我希望解除pdf,我通过以下方式做到了这一点:

 ReportViewer1.ShowExportControls = false;
因为无法在ReportViewer中禁用任何特定的导出功能(例如pdf但不是excel)。下面是我(稍微)修改过的代码。理想情况下,我希望类似于前面的导出选项,在这里我可以将文件保存到我想要的任何位置

编辑:代码可以工作,但是我需要如何修改Filestream,以便不自动保存文件,而是提示用户可以保存到他们想要的任何位置

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();

}

我是根据微软在ReportViewer上的文档和谷歌的一些搜索结果将这些信息放在一起的,以防有人遇到与我类似的问题:

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();
}

只是提醒一下。。。接受的答案将呈现为原始海报要求的XLS文件

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

要获取可能值的完整列表,可以调用。当我在report viewer实例上运行它时,我得到了以下可能的选项:

“Excel”
“EXCELOPENXML”
“图像”
“PDF”
“WORD”
“WORDOPENXML”


我发现很难确定需要传递哪些格式。如果你问我的话,MSDN对这一点的描述非常糟糕。

如果你想隐藏一个单独的导出选项(尽管听起来你似乎觉得自定义导出很有用),这里有两个选项:

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

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

  • 当引用像这样晦涩难懂的CSS选择器时,要小心,因为这是一种黑客行为

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

  • 将以下方法作为后端代码添加到.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);
            }
        }
    }
    
  • 选择相关的Reportviewer控件并按F4

  • 在Properties窗口中,单击Events图标,然后双击PreRender项以生成ReportViewer1\u PreRender方法,我假设您的reportViewer控件ID为ReportViewer1,请按如下方式编辑您的方法:

    protected void ReportViewer1_PreRender(object sender, EventArgs e)
    {
        DisableUnwantedExportFormat((ReportViewer)sender,"Excel");
    }
    

  • (来源:,和@valik的链接答案。)

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

    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
    

    根据需要使用上述方法。希望这就是你想要的。

    我寻找这个答案已经很久了。非常感谢你。
    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