輸出CSV格式報表和解決亂碼問題(C#)

在實務上,經常需要寫輸出報表的功能

本篇記錄常見的報表格式之一,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