/// <summary>
/// CSV小幫手
/// </summary>
public static class CSVHelper
{
/// <summary>
/// CSV轉化爲DataTable
/// </summary>
/// <param name="filePath">CSV文件路徑</param>
/// <returns></returns>
public static DataTable CSVToDataTable(string filePath = null)
{
if (string.IsNullOrEmpty(filePath))
{
using var ofd = new OpenFileDialog
{
Filter = "CSV (逗號分隔)(*.csv)|*.csv",
DefaultExt = "csv"
};
if (ofd.ShowDialog() == DialogResult.OK)
{
filePath = ofd.FileName;
}
else
{
return null;
}
}
// 以下部分參考自Github@Jimmey-Jiang:Common.Utility
using DataTable dt = new DataTable();
int intColCount = 0;
bool isHeaderColumn = true;
DataColumn column;
DataRow row;
using var reader = new StreamReader(filePath, Encoding.UTF8);
string strline;
while (!string.IsNullOrEmpty(strline = reader.ReadLine()))
{
string[] aryline = strline.Split(new char[] { ',' });
if (isHeaderColumn)
{
isHeaderColumn = false;
intColCount = aryline.Length;
for (int i = 0; i < aryline.Length; i++)
{
column = new DataColumn(aryline[i]);
dt.Columns.Add(column);
}
continue;
}
row = dt.NewRow();
for (int i = 0; i < intColCount; i++)
{
row[i] = aryline[i];
}
dt.Rows.Add(row);
}
return dt;
}
/// <summary>
/// DataTable轉化爲CSV文件
/// </summary>
/// <param name="dt">需要導出的DataTable</param>
/// <param name="fileName">CSV文件路徑</param>
public static void DataTableToCSV(DataTable dt, string fileName = null, bool isShowResult = true)
{
if (string.IsNullOrEmpty(fileName))
{
using var sfd = new SaveFileDialog
{
Filter = "CSV (逗號分隔)(*.csv)|*.csv",
DefaultExt = "csv"
};
if (sfd.ShowDialog() == DialogResult.OK)
{
fileName = sfd.FileName;
}
else
{
return;
}
}
if (dt == null)
{
throw new ArgumentNullException(nameof(dt));
}
// 以下部分參考自Github@Jimmey-Jiang:Common.Utility
StringBuilder csvText = new StringBuilder();
StringBuilder csvrowText = new StringBuilder();
foreach (DataColumn dc in dt.Columns)
{
csvrowText.Append(",");
csvrowText.Append(dc.ColumnName);
}
csvText.AppendLine(csvrowText.ToString().Substring(1));
foreach (DataRow dr in dt.Rows)
{
csvrowText = new StringBuilder();
foreach (DataColumn dc in dt.Columns)
{
csvrowText.Append(",");
csvrowText.Append(dr[dc.ColumnName].ToString().Replace(',', ' '));
}
csvText.AppendLine(csvrowText.ToString().Substring(1));
}
File.WriteAllText(fileName, csvText.ToString(), Encoding.UTF8);
if (isShowResult)
{
MessageBox.Show("CSV保存成功!", "提示");
}
}
}
C#——導入導出CSV文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.