CSV TO DataTable解決欄位名稱中間有空白,或文字欄位會包含雙引號(")的問題
using ServiceStack.Text;
class CSVHelper
{
/// <summary>
/// CSV TO DataTable via ServiceStack.Text.CSVReader(可以正確處理文字有包含雙引號的資料)
/// </summary>
/// <param name="fileName">檔案路徑</param>
/// <param name="hasTitle">是否包含標題列</param>
/// <returns>DataTable</returns>
public static DataTable CSV2DTviaCSVReader(string fileName, bool hasTitle=false)
{
DataTable dt = new DataTable();
bool isFirst = true;
var csv = File.ReadAllText(fileName, Encoding.GetEncoding(950));
foreach (var line in CsvReader.ParseLines(csv))
{
string[] strArray = CsvReader.ParseFields(line).ToArray();
//是否為第一筆
if (isFirst)
{ //若第一筆,則進行標題處理
isFirst = !isFirst;
for (int i = 0; i < strArray.Length; i++)
{
dt.Columns.Add();
if (hasTitle)
{
//有標題,寫入標題名稱
dt.Columns[i].ColumnName = strArray[i];
}
else
{
//無標題,寫入替代名稱C1-Cxxx
dt.Columns[i].ColumnName = "C" + (i + 1).ToString();
}
}
//若無標題代表第一行就要有資料
if (!hasTitle)
{
//寫入資料
dt.Rows.Add(strArray);
}
}
else
{
//寫入資料
dt.Rows.Add(strArray);
}
}
return dt;
}
}
Written By Felix Hsieh