Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ReportViewer和SQL Server报表创建Excel文件_Excel_Asp.net Mvc 3_Report Viewer2010 - Fatal编程技术网

从ReportViewer和SQL Server报表创建Excel文件

从ReportViewer和SQL Server报表创建Excel文件,excel,asp.net-mvc-3,report-viewer2010,Excel,Asp.net Mvc 3,Report Viewer2010,我有一个web应用程序,它有一个网格,向用户显示分页的数据列表。用户需要将结果下载到Excel电子表格的选项。但是,如我所说,网格中显示的项目是分页的,我需要整个结果集。此外,我只显示每个项目大约7个字段,而电子表格将包含一个项目的所有20多个字段。所以,我不是在寻找一个网格到Excel的解决方案 我正在尝试做一些我以前实际工作过的事情。在以前的雇主(源代码不可用)处,我们有一个应用程序,其中包含作为RDLC文件的SQL Server报告。我们将在代码中创建一个ReportViewer控件(va

我有一个web应用程序,它有一个网格,向用户显示分页的数据列表。用户需要将结果下载到Excel电子表格的选项。但是,如我所说,网格中显示的项目是分页的,我需要整个结果集。此外,我只显示每个项目大约7个字段,而电子表格将包含一个项目的所有20多个字段。所以,我不是在寻找一个网格到Excel的解决方案

我正在尝试做一些我以前实际工作过的事情。在以前的雇主(源代码不可用)处,我们有一个应用程序,其中包含作为RDLC文件的SQL Server报告。我们将在代码中创建一个ReportViewer控件(var ReportViewer=new ReportViewer()。然后,我们将报告绑定到控件,给它一个数据源,然后以我们需要的任何格式呈现结果。在我的例子中,我需要一个Excel文件,然后将Excel文件流回到响应中的用户


我使用的是MVC3,因此我将返回Excel文件作为FileContentResult。我在网上搜索了一天,找不到我想要的东西

您可以尝试以下方法。。。我们从数据访问级别填充一个对象列表,然后将该对象列表传递给如下内容

public static byte[] SaveExcelData<T>(List<T> answer)
{
    byte[] fileData = null;

    var grid = new System.Web.UI.WebControls.GridView();

    grid.DataSource = answer;
    grid.DataBind(); 

    HttpContext.Current.Response.ClearContent();
    string headerAddition = "attachment; filename=";
    headerAddition += answer[0].GetType().Name + ".xls";
    HttpContext.Current.Response.AddHeader("content-disposition", headerAddition);
    HttpContext.Current.Response.ContentType = "application/excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    grid.RenderControl(htw);

    fileData = System.Text.Encoding.UTF8.GetBytes(sw.ToString());

    return fileData;
}
公共静态字节[]SaveExcelData(列表答案)
{
字节[]fileData=null;
var grid=new System.Web.UI.WebControls.GridView();
grid.DataSource=答案;
grid.DataBind();
HttpContext.Current.Response.ClearContent();
string headerAddition=“附件;文件名=”;
headerAddition+=答案[0]。GetType().Name+“.xls”;
HttpContext.Current.Response.AddHeader(“内容处置”,headerAddition);
HttpContext.Current.Response.ContentType=“应用程序/excel”;
StringWriter sw=新的StringWriter();
HtmlTextWriter htw=新的HtmlTextWriter(sw);
网格渲染控制(htw);
fileData=System.Text.Encoding.UTF8.GetBytes(sw.ToString());
返回文件数据;
}

控制器动作。格式参数应为“EXCEL”

    public FileResult Report(String format)
    {
        LocalReport report = new LocalReport();
        report.ReportPath = Server.MapPath("~/TestReport.rdlc");

        report.DataSources.Clear();
        report.DataSources.Add(new ReportDataSource(GetData()));

        report.Refresh();

        return GetFileContentResult(report, format, null, "TestReport");
    }
从任何报表创建FileContentResult的帮助器方法

    public FileContentResult GetFileContentResult(Report report, String format, String deviceInfo, String fileDownloadName)
    {
        String mimeType;
        String encoding;
        String filenameExtension;
        String[] streamIds;
        Warning[] warnings;

        FileContentResult fileContentResult = new FileContentResult(report.Render(format, deviceInfo, out mimeType, out encoding, out filenameExtension, out streamIds, out warnings), mimeType);
        fileContentResult.FileDownloadName = Path.ChangeExtension(fileDownloadName, filenameExtension);

        return fileContentResult;
    }

编辑:忘记调用帮助功能。哎呀。

我之前试过类似的方法(尽管我没有使用gridview)。当它工作时,它会在打开文件之前提示用户,说Excel工作簿的格式不正确。