2009-04-21 41 views
2

我們正在從網站應用程序導出一些數據到Excel電子表格中,但是,當使用GBP符號而不是輸出「£9.99」時,它會產生「£9.99」。如何將英鎊符號從C#Web應用程序正確導出到Excel? (而不是英鎊)

這裏有一個同事寫了生產電子表格中的代碼[tableOut是包含HTML表格一個StringBuilder]:

string filename = "EngageReplies.xls"; 
Response.Clear(); 
Response.Buffer = true; 
Response.ContentType = "application/vnd.ms-excel"; 
Response.AddHeader("content-disposition", "attachment;filename=" + filename); 
Response.Charset = "UTF-8"; 
Response.ContentEncoding = System.Text.Encoding.UTF8; 
this.EnableViewState = false; 

Response.Write(tableOut); 
Response.End(); 

任何想法如何,我們可以得到需要的結果?

p.s.不知道我是否應該分開處理成一個單獨的問題,但生成電子表格時,將觸發警告消息:

你試圖打開, 「EngageReplies.xls」的文件,是在不同的 格式比文件 擴展名指定的格式。在打開文件之前,驗證文件是否爲 已損壞,並且來自信任的源 。你想要 現在打開文件嗎?

我已經使用Firefox和IE打開Office 2007文件。單擊是打開文件好,但如果我的用戶不受它影響,我更喜歡它。

回答

6

啊哈!

首先,我試圖消除字符集和的characterEncoding,但仍然得到了錯誤的輸出,所以後來我把它們設置爲以下和它工作正常:

Response.Charset = ""; 
Response.ContentEncoding = System.Text.Encoding.Default; 

謝謝你的靈感羅蘭!

3

我不希望在傳輸二進制文件(如XLS文件)時看到Charset/ContentEncoding標頭。我也會測試輸出,將它保存到lcoal磁盤的某個地方,並驗證文件創建是否「正確」。

0

警告是因爲您保存的是HTML數據,而不是XLS擴展文件中的Excel Spreadsheet數據。您可以嘗試將文件擴展名更改爲'.htm',但我不確定如何在Excel中打開該文件而不是Web瀏覽器。

您proably想看看這個問題,更多的Generating an Excel file in ASP.NET

0

我同意馬丁布朗這是一個HTML表格不是Excel電子表格,這就是爲什麼你得到這個消息。然而,我可以看到爲什麼開發人員將它保存爲.xls,這意味着最終用戶會獲得由Excel(它處理帶有警告的HTML轉換)打開的表格,而不是其Web瀏覽器中的html開頭。讓我的用戶體驗更好一點。

另一種方法是使用office interop(需要安裝在服務器和大量配置中)正確創建表格,或者找到可以正確創建excel文件的庫。

0
Response.ContentEncoding = System.Text.Encoding.Unicode; /*c# uses UTF-16 internally*/ 
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); /*Include the UTF-16 header so excel will treat this as UTF-16*/ 

試試這個代碼它對這個問題完美工作。