C#处理csv格式的Excel文件代码

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

public class CSVFileHelper

{

/// <summary>

/// 将DataTable中数据写入到CSV文件中

/// </summary>

/// <param name="dt">提供保存数据的DataTable</param>

/// <param name="fileName">CSV的文件路径</param>

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, System.IO.FileMode.Create, System.IO.Fileaccess.Write);

//StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);

StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);

string data = "";

//写出列名称

for (int i = 0; i < dt.Columns.Count; i++)

{

data += dt.Columns[i].ColumnName.ToString();

if (i < dt.Columns.Count - 1)

{

data += ",";

}

}

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();

DialogResult result = MessageBox.Show("CSV文件保存成功!");

if (result == DialogResult.OK)

{

//System.Diagnostics.PRocess.Start("explorer.exe", Common.PATH_LANG);

}

}

/// <summary>

/// 将CSV文件的数据读取到DataTable中

/// </summary>

/// <param name="fileName">CSV文件路径</param>

/// <returns>返回读取了CSV数据的DataTable</returns>

public static DataTable OpenCSV(string filePath)

{

//Encoding encoding = Common.GetType(filePath); //Encoding.ASCII;//

DataTable dt = new DataTable();

FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);

//StreamReader sr = new StreamReader(fs, Encoding.UTF8);

StreamReader sr = new StreamReader(fs, Encoding.Default);

//string fileContent = sr.ReadToEnd();

//encoding = sr.CurrentEncoding;

//记录每次读取的一行记录

string strLine = "";

//记录每行记录中的各字段内容

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 < aryLine.Length; j++)

{

dr[j] = aryLine[j];

}

dt.Rows.Add(dr);

}

}

if (aryLine != null && aryLine.Length > 0)

{

dt.DefaultView.Sort = tableHead[0] + " " + "asc";

}

sr.Close();

fs.Close();

return dt;

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航