文章评分 次,平均分 :
关于 CSV 文件
CSV,全称Comma-Separated Values,即逗号分隔值(或字符分隔值),它是一种以逗号等符号间隔的数据文件格式,可用于存放不带公式和格式的电子表格。CSV文件可以使用Excel软件打开和编辑。因为CSV文件的本质是TXT文件,因此可以使用《C#:读写TXT文件》一文介绍的方法对其进行读写操作。
之所以介绍CSV文件,是因为目前要在C#中输出Excel文件(xls、xlsx)是一件比较麻烦的事。相比之下,CSV文件输出操作简单,输出行数无限制(xls格式最大65,536行,xlsx格式最大1,048,576行),且可以使用Excel打开。
写 CSV 文件
public static void SaveCSV(DataTable dt, string fullPath)
{
FileInfo fi = new FileInfo(fullPath);
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
FileStream fs = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
string data = string.Empty;
//输出列名称
for (int i = 0; i < dt.Columns.Count; i++)
{
data += dt.Columns[i].ColumnName.ToString()+",";
}
data = data.Substring(0,data.Length-1);
sw.WriteLine(data);
//输出各行数据
for (int i = 0; i < dt.Rows.Count; i++)
{
data = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
string str = dt.Rows[i][j].ToString();
str = str.Replace("\"", "\"\"");//替换英文引号
if (str.Contains(',') || str.Contains('"') || str.Contains('\r') || str.Contains('\n')) //含逗号、引号、换行符的需要放到引号中
{
str = string.Format("\"{0}\"", str);
}
data += str;
if (j < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
sw.Close();
fs.Close();
}读 CSV 文件
public static DataTable ReadCSV(string filePath)
{
DataTable dt = new DataTable();
FileStream fs = new FileStream(filePath, FileMode.Open,FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.Default);
//记录每次读取的一行记录
string strLine = string.Empty;
//记录每行记录中的各字段内容
string[] aryLine = null;
string[] tableHead = null;
//标示列数
int columnCount = 0;
//标示是否是读取的第一行
bool IsFirst = true;
//逐行读取CSV中的数据
while ((strLine = sr.ReadLine()) != null)
{
if (IsFirst == true)
{
tableHead = strLine.Split(',');
IsFirst = false;
columnCount = tableHead.Length;
//创建列
for (int i = 0; i < columnCount; i++)
{
DataColumn dc = new DataColumn(tableHead[i]);
dt.Columns.Add(dc);
}
}
else
{
aryLine = strLine.Split(',');
DataRow dr = dt.NewRow();
for (int j = 0; j < columnCount; j++)
{
dr[j] = aryLine[j];
}
dt.Rows.Add(dr);
}
}
sr.Close();
fs.Close();
return dt;
}
注意事项
在函数 SaveCSV() 中,由于考虑了单引号、逗号部分特殊符号量的输出,因此流程与纯文本的输出稍有差异。具体来说,如果某单元格的原始数据为 Hi,test"14",在写 CSV 文件时应输出为 "Hi,test""14""",这样才能确保在 Excel 中有正确的显示。

鉴于符号组合的复杂性,在函数 ReadCSV() 中,并没有考虑特殊符号。因此,ReadCSV() 仅适合读入简单的逗号分隔文件,这是本文提供的读 CSV 文件的方法的局限所在。
除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/csharp-csv/




暂无评论