由于excel有版本区分,读写的时候容易出问题,所以一般写好excel文件另存为*.csv格式,进行读写
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Data.OleDb; using System.Data; using System.Windows.Forms; //一个csv的读写操作类 namespace WindowsFormsApplication1 { public class CsvRw { public static DataTable OpenCSV(string filePath) { DataTable dt = new DataTable(); FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); StreamReader sr = new StreamReader(fs, Encoding.Default); string strLine = ""; //记录每行记录中的各字段内容 string[] aryLine = null; string[] tableHead = null; //标示列数 int columnCount = 0; //标示是否是读取的第一行 bool IsFirst = true; int hangshu=0; // 逐行读取CSV中的数据 while ((strLine = sr.ReadLine()) != null) { if (IsFirst == true) { tableHead = strLine.Split(','); IsFirst = false; columnCount = tableHead.Length; for (int i = 0; i < columnCount; i++) { tableHead[i] = tableHead[i].Replace("\"", ""); 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].Replace("\"", ""); } dt.Rows.Add(dr); } hangshu += 1; //Console.WriteLine(dt.Rows.Count); } MessageBox.Show(dt.Rows.Count.ToString()+"行数"); // //if (aryLine != null && aryLine.Length > 0) //{ // dt.DefaultView.Sort = tableHead[2] + " " + "DESC"; //} sr.Close(); fs.Close(); return dt; } /// <summary> /// 写入 /// </summary> /// <param name="dt"></param> /// <param name="fullFileName"></param> /// <returns></returns> public static Boolean SaveCSV(DataTable dt, string fullFileName) { Boolean r = false; FileStream fs = new FileStream(fullFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); 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++) { data += dt.Rows[i][j].ToString(); if (j < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); } sw.Close(); fs.Close(); r = true; return r; } } }