导出格式化excel

时间:2013-08-01 11:52:12

标签: c# asp.net-mvc-4 gridview

我试图使用MVC 4中的Gridview将表格从数据库导出到Excel。有人能告诉我如何为excel表格中的导出行提供颜色吗?

public ActionResult ExportToExcel()
{
        GridView gv = new GridView();
        gv.DataSource = db.StudentRecords.ToList();
        gv.DataBind();
        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment; filename=Marklist.xls");
        Response.ContentType = "application/ms-excel";
        Response.Charset = "";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        gv.RenderControl(htw);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
        return RedirectToAction("index");
}

1 个答案:

答案 0 :(得分:1)

有两种主要方法可以解决这个问题。第一种是将数据渲染到现有的Excel文件中(创建的模板文件已经嵌入了所有格式)。第二种是在渲染输出时以编程方式格式化单元格。

生成Excel文件(而不是简单的CSV文件)并非易事,因此最简单的方法是使用第三方组件。我在Aspose.Cells上取得了很大的成功(除了支持.NET,还有Java版本,还有其他版本)。当然,这不是唯一的组成部分。它是一种商业产品,但他的支持非常好。

如果您决定使用组件生成Excel文件,则GridView在很大程度上是不必要的,因为您可以将数据集绑定或映射到组件对象模型中(在Aspose的情况下,您将数据绑定到工作表)。

以下是Aspose网站上的Hello World示例。查看helloworld.aspx.cs代码以了解它是如何工作的。

http://www.aspose.com/demos/.net-components/aspose.cells/csharp/quick-start/data/hello-world.aspx

显然这比你的例子更复杂,但据我所知,这是生成复杂Excel文件(格式化,公式等)的最简单方法。如果你定期做这类事情,那么对这个问题进行投资会非常方便。

另外,有关流媒体的说明。 Aspose允许您轻松地将文件流式传输到HttpResponse流。例如(来自上面的文档):

workbook.Save(HttpContext.Current.Response, "HelloWorld.xls", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Excel97To2003));

正如Mikael上面提到的那样,还有其他组件,这使得这种工作变得更加容易,并允许一些非常高级的Excel文件渲染。