Создание настраиваемого экспорта в Excel для ReportViewer (rdlc)

Я заинтересован в создании настраиваемой опции экспорта в Excel для моего отчета в ReportViewer. Это в основном потому, что я хочу отключить PDF-файл, и я сделал это через:

 ReportViewer1.ShowExportControls = false;

Поскольку нет возможности отключить какие-либо определенные функции экспорта (например, PDF, но не Excel) в ReportViewer. Вот мой (слегка) измененный код ниже. В идеале я хотел бы что-то похожее на предыдущие параметры экспорта, где я могу сохранить файл в любом месте, где я захочу.

РЕДАКТИРОВАТЬ: код работает, но как мне изменить 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();

}

person firedrawndagger    schedule 16.08.2010    source источник


Ответы (4)


Предупреждаем ... принятый ответ будет отображаться в виде файла XLS, который был запрошен исходным автором.

Однако теперь вы также можете экспортировать в XLSX. Вам необходимо изменить параметр format метода Render() с "Excel" до "EXCELOPENXML".

Чтобы получить полный список возможных значений, вы можете вызвать _ 5_. Когда я запустил его на своем экземпляре средства просмотра отчетов, у меня были следующие возможные варианты:

"Excel" "EXCELOPENXML" "IMAGE" "PDF" "WORD" "WORDOPENXML"

Мне было очень трудно определить, что вам нужно передать для форматов. MSDN очень плохо документирует это, если вы спросите меня.

person JBausmer    schedule 23.04.2013
comment
Я так долго искал этот ответ. Большое Вам спасибо. - person Veysel Ozdemir; 24.04.2014

Я собрал это на основе документации Microsoft по 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();
}
person firedrawndagger    schedule 18.08.2010

Если вы хотите скрыть одну опцию экспорта (хотя похоже, что вы, кажется, сочли настраиваемый экспорт полезным), вот два варианта:

Вариант A. Использование CSS, чтобы скрыть параметр экспорта:

  1. В окне отладки F12 вашего браузера найдите элемент HTML DOM для экспорта, щелкните его правой кнопкой мыши и скопируйте уникальный идентификатор CSS.
  2. Добавьте это в свой файл CSS (заменив селектор CSS контекстом вашего буфера обмена):

    #ReportViewer1_ctl05_ctl04_ctl00_Menu > div:nth-child(3) 
    {
        display:none;
    }
    

При обращении к непонятному селектору CSS, подобному этому, рекомендуется соблюдать осторожность, поскольку это хакерский метод.

Вариант Б. Использование кода программной части, чтобы скрыть параметр экспорта

  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 является ReportViewer1, отредактируйте свой метод, как показано ниже:

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

(Источник: 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 отвечает.)

person Jared Thirsk    schedule 18.01.2015

Есть способ отключить определенный экспорт в средстве просмотра отчетов. Увидеть ниже.

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

При необходимости используйте указанное выше. Надеюсь, это то, что вы ищете.

person sudheer    schedule 25.05.2021