Создание пользовательского экспорта в Excel для ReportViewer (rdlc) - PullRequest
18 голосов
/ 16 августа 2010

Меня интересует создание настраиваемой опции экспорта в Excel для моего отчета в ReportViewer. Это в основном потому, что я хочу отключить 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();

}

Ответы [ 3 ]

30 голосов
/ 23 апреля 2013

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

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

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

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

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

19 голосов
/ 18 августа 2010

Я собрал это на основе документации 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();
}
1 голос
/ 18 января 2015

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

Опция A. Использование CSS для скрытия экспортаопция:

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

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

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

Вариант B. Использование скрытого кода для скрытия опции экспорта

  1. Добавьте приведенный ниже метод в файл .aspx.cs в качестве back-код конца.

    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.)

...