0

我试图在 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");
}
4

1 回答 1

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 文件进行一些非常高级的渲染。

于 2013-08-01T12:12:58.807 回答