.net 流氓
天下无难事,有志者成之;天下无易事,有恒者得之。

在一个项目中,需要从Excel文件导入数据然后再datagridview上显示,同时也需要右键datagridview时可以将数据另存为excel文件,于是写了这两个工具方法。本文提供了两个方法用于Excel和DataTable之间相互转化。

1, 从Excel文件、CSV文件导入到DataTable:
 

  1. public static DataTable csvToDataTable(string file)  
  2.  {  
  3.      string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;'"// Excel file  
  4.  if(file.EndsWith(".csv"))  
  5.          strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='TEXT;HDR=Yes;FMT=Delimited;'"// csv file:HDR=Yes-- first line is header  
  6.      OleDbConnection oleConn = new OleDbConnection(strConn);  
  7.      oleConn.Open();  
  8.      DataTable sheets = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  
  9.      if (sheets == null || sheets.Rows.Count < 1)  
  10.      {  
  11.          return null;  
  12.      }  
  13.      String fileName = sheets.Rows[0]["TABLE_NAME"].ToString(); // sheets.Rows[0] -- first sheet of excel  
  14.  if(file.EndsWith(".csv"))  
  15.   fileName = file.Substring(file.LastIndexOf("/"));  
  16.      string olestr = "select * from [" + fileName + "]";  
  17.      if (file.EndsWith(".csv"))  
  18.          olestr = "select * from [" + fileName + "]";  
  19.      OleDbCommand oleComm = new OleDbCommand(olestr, oleConn);  
  20.      oleComm.Connection = oleConn;  
  21.      OleDbDataAdapter oleDa = new OleDbDataAdapter();  
  22.      oleDa.SelectCommand = oleComm;  
  23.      DataSet ds = new DataSet();  
  24.      oleDa.Fill(ds);  
  25.      oleConn.Close();  
  26.      return ds.Tables[0];  
  27.  }  

2,DataTable到出到CSV文件:
 

  1. public static void dataTableToCsv(DataTable table, string file)  
  2.         {  
  3.             string title = "";  
  4.  
  5.             FileStream fs = new FileStream(file, FileMode.Create);  
  6.             StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);  
  7.  
  8.             for (int i=0; i<table.Columns.Count; i++)  
  9.             {  
  10.                 title += table.Columns[i].ColumnName + ",";  
  11.             }  
  12.             title = title.Substring(0, title.Length - 1) + "\n";  
  13.             sw.Write(title);  
  14.  
  15.             foreach (DataRow row in table.Rows)  
  16.             {  
  17.                 string line = "";  
  18.                 for (int i = 0; i < table.Columns.Count; i++)  
  19.                 {  
  20.                     line += row[i].ToString() + ",";  
  21.                 }  
  22.                 line = line.Substring(0, line.Length - 1) + "\n";  
  23.  
  24.                 sw.Write(line);  
  25.             }  
  26.  
  27.             sw.Close();  
  28.             fs.Close();  
  29.         }  
  30.     }  
  31.  
  32.  

本文出自 “小何贝贝的技术空间” 博客,请务必保留此出处http://babyhe.blog.51cto.com/1104064/407065

posted on 2011-08-03 19:32  .net 流氓  阅读(471)  评论(0编辑  收藏  举报