2014-03-19 96 views
0

我看到這個問題已經被問了好幾次才但以防萬一它可能已經逃脫一些人眼中我陳述問題再次保存HTML表格到Excel

我們ASP.Net Web應用程序顯示呈現爲一些報道屏幕上的html表格,我們也有導出功能。這是一個標準的代碼

Table a = new Table(); 

Response.ClearContent(); 
Response.Buffer = true; 
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Customers.xls")); 
Response.ContentType = "application/ms-excel"; 
StringWriter sw = new StringWriter(); 
HtmlTextWriter htw = new HtmlTextWriter(sw); 
gridName.RenderControl(htw); 
Response.Write(sw.ToString()); 
Response.End(); 

到目前爲止好。問題是,當導出爲Excel時,它實際上被保存爲html,所以當文件被Excel打開時,會出現警告,說格式不正確。這並不是什麼大問題,因爲警告文件將會打開。

但IE11有時這些文件拒絕打開說格式不正確。由於IE11將推出給越來越多的用戶,我們將不得不解決這個問題。我的選擇是

  1. 找到一種方法將其保存爲XLS文件,而不是HTML
  2. 重寫整個輸出爲Excel當點擊出口,而不是渲染控制輸出到Excel。我們在我們的項目中使用Aspose,所以我可以這樣做

我確實試圖找出,但找不到任何可以讓您將內容保存爲實際xls數據而不是html的內容。我相信這是一個非常普遍的問題,所以如果任何人有任何解決方案或建議相同。

如果什麼都行不通,我將不得不採取選項2,這是更多的工作考慮格式和樣式。

回答

0

你可以導入HTML表格使用的Aspose.Cells脫穎而出。 HTML表格中的數據將被導入,但是,您需要處理表格格式。

//table.txt contains HTML table 
string contents = File.ReadAllText(@"C:\data\table.txt"); 

using (var stream = new MemoryStream(Encoding.ASCII.GetBytes(contents))) 
{ 
    var loadOptions = new LoadOptions(LoadFormat.Html) 
    { 
     ConvertNumericData = false 
    }; 

    //Load the HTML, this will import all the HTML table data to Excel file 
    var workbook = new Workbook(stream, loadOptions); 

    //Adding a new List Object to the worksheet, after this you can format the table 
    Aspose.Cells.Tables.ListObject listObject = workbook.Worksheets[0].ListObjects[workbook.Worksheets[0].ListObjects.Add("A3", "E23", true)]; 

    //Adding predefined Style to the table 
    listObject.TableStyleType = Aspose.Cells.Tables.TableStyleType.TableStyleMedium10; 

    //Save using Response 
    workbook.Save(this.Response, "Customer.xls", ContentDisposition.Inline, new XlsSaveOptions()); 
} 

希望這會有所幫助。

+0

感謝您的解決方案。我自己錯過的原因是因爲我們的機器上安裝了7.0.1.0,並且該版本沒有可用的LoadFormat.Html,因此只能添加到更高版本。 – Yatish