在實務上,經常需要寫輸出報表的功能
本篇記錄常見的報表格式之一,CSV的程式碼
以及用Excel開啟時遇到亂碼的解決方法
CSV是一種簡單的資料交換格式,主要是以逗號和換行來建立內容
而CSV檔可以透過文字編輯器和Excel來開啟
這裡的情境模擬
為頁面有一個產生報表的按鈕,點擊時輸出報表
主要的程式碼如下:
public void DownloadCSV()
{
//建立檔名
string filename = "test.csv";
//建立內容
StringBuilder sb = new StringBuilder();
sb.Append("Name,Height,Weight\n");
sb.Append("Piggy,167.5,57.5\n");
sb.Append("Fatty,177.5,82.5\n");
sb.Append("姓名,身高,體重\n");
sb.Append("小肥豬,167.5,57.5\n");
sb.Append("大胖豬,177.5,82.5\n");
//設定標頭
Response.AddHeader("Content-disposition", "attachment; filename=\"" + filename + "" + "\"");
//設定回傳媒體型別(MIME)
Response.ContentType = "text/csv";
//設定主體內容編碼
Response.ContentEncoding = Encoding.UTF8;
//建立StreamWriter,取得Response的OutputStream並設定編碼為UTF8
StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.UTF8);
//寫入資料
sw.Write(sb.ToString());
//關閉StreamWriter
sw.Close();
//釋放StreamWriter資源
sw.Dispose();
//送出Response
Response.End();
}
輸出結果為:
有些寫法會用GetBytes將字串轉為byte陣列
再透過Response.BinaryWrite()進行輸出
這樣做的話用文字編輯器開啟沒問題
但是用Excel開啟就會出現亂碼
若遇到這樣的情況,解決的辦法有幾種
1.文字編輯器
(1)用文字編輯器開啟CSV檔,選擇另存新檔
(2)點選下面的編碼,選擇[具有BOM的UTF-8]後,儲存檔案
(3)再次用EXCEL開啟,編碼已正常
2.Excel
(1)建立一個新的Excel檔案
(2)選取資料-->從文字檔-->選取csv檔
(3)進入設定,選擇分隔符號與檔案原始格式
(4)選擇逗點分隔符號
(5)資料格式選擇一般即可
(6)點擊完成後,設定資料顯示位置
就會把CSV的內容輸出到新的檔案裡
3.Google雲端硬碟
(1)將CSV檔上傳至雲端硬碟
(2)對檔案按右鍵-->選擇開啟工具-->Google試算表
此時試算表會自動處理編碼問題
(3)點選檔案-->下載-->Microsoft Excel