Согласно различным публикациям и ресурсам { 1 , 2 , 3 }, то, что вы пытаетесь достичь, не является встроенной функциональностью элемент управления ReportViewer в Visual Studio.
Если эта функциональность необходима, вы всегда можете отключить кнопку экспорта в средстве просмотра отчетов и добавить кнопку или другой элемент управления, чтобы позаботиться об экспорте. Ниже приведен вызов класса для метода, который я использую в программе для автоматической генерации файла Excel при запуске отчета, но единственное изменение, которое вам нужно будет сделать, - это подписаться на этот метод с помощью нажатия кнопки:
Примечание: custNmbr - это переменная, которая используется для именования отчета после клиента, для которого он был запущен. Вы можете удалить это, если хотите (так как это мой параметр отчета), или сделать его динамическим с помощью собственного кода, чтобы файлы не перезаписывали друг друга.
public static void reportWriter(ReportViewer reportViewer1, string custNmbr)
{
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;
string Dpath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + custNmbr + ".xls";
byte[] bytes = reportViewer1.LocalReport.Render(
"Excel", null, out mimeType, out encoding, out filenameExtension,
out streamids, out warnings);
using (FileStream fs = new FileStream(Dpath, FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
}
}
Поскольку Dpath будет местоположением этого недавно экспортированного файла, вы можете просто добавить ссылку на Excel Interop и вызвать excel / новый файл через:
Application excel = new Application();
Workbook wb = excel.Workbooks.Open(Dpath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
Надеюсь, это поможет.