2013-08-01 46 views
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"); 
} 
+0

請考慮這個優秀的組件:http://epplus.codeplex.com/ –

回答

1

有兩種主要方法可以解決這個問題。首先是將數據渲染到現有的Excel文件中(已經創建了一個已經嵌入了所有格式的模板文件)。第二種是在呈現輸出時以編程方式格式化單元格。

生成Excel文件(而不是簡單的CSV文件)並不重要,所以最簡單的方法是使用第三方組件。我在Aspose.Cells方面取得了很大的成功(除了支持.NET,還有Java版本,還有其他的)。當然,這不是那裏唯一的組成部分。這是一個商業產品,但他們的支持在我的經驗中非常出色。

如果您決定使用組件生成Excel文件,那麼GridView在很大程度上是不必要的,因爲您可以將數據集綁定或映射到組件對象模型(在Aspose的案例中,您將將數據綁定到Worksheet) 。

以下是來自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文件的一些比較先進的渲染。