2014-02-05 38 views
1

我已經使用導出到Excel的功能如下:導出到Excel中使用現有的Excel模板

var table = getReport(param1, param2, param3); 
      Response.ClearContent(); 
      Response.AddHeader("content-disposition", "attachment;filename=Report.xls"); 
      Response.ContentType = "application/vnd.ms-excel"; 
      System.Web.UI.WebControls.GridView grd = new System.Web.UI.WebControls.GridView(); 
      grd.DataSource = table; // give datasource here 
      grd.DataBind(); 
      StringWriter swr = new StringWriter(); 
      HtmlTextWriter tw = new HtmlTextWriter(swr); 
      grd.RenderControl(tw); 
      Response.Write(swr.ToString()); 
      Response.End(); 
      return View(); 

其中getReport以表格的形式返回數據。 現在創建一個新的Excel文件,但我想使用現有的Excel模板來創建Excel輸出。 如何將這種模板添加到項目以及如何將數據綁定到項目?

回答

0

您現在使用的方法是將HTML字符串寫入Response,並在Response標題中將ContentType設置爲Excel。這不會創建一個真正的Excel文件,它只會強制瀏覽器在Excel中啓動文件,並且Excel能夠處理HTML文件。這種方法無法添加模板。

如果您想使用現有的Excel文件作爲模板,則需要使用可創建和修改真實Excel文件的API,如OfficeWriter。以下是如何使用OfficeWriter將DataTable直接綁定到模板文件的示例。

using SoftArtisans.OfficeWriter.ExcelWriter;  

ExcelTemplate xlt = new ExcelTemplate(); 
//Open the template file 
xlt.Open(pathToTemplateFile); 
//Create a DataBindingProperties object 
DataBindingProperties props = xlt.CreateDataBindingProperties(); 
// Call the BindData method, passing the DataTable and a name for the datasource 
// which will be referenced in the "data markers" in the template 
xlt.BindData(table, "DataSource1", props); 
//Call the Process method, which binds the data and generates the output file 
xlt.Process(); 
//Stream the file to the Response 
xlt.Save(Response, "Report.xls", false); 

聲明:我SoftArtisans工作的OfficeWriter

製造商