C#如何读取Excel中的数据2014-10-07
#region 读取Excel中的数据
02./// <summary>
03./// 读取Excel中的数据
04./// </summary>
05./// <param name="excelFile">Excel文件名及路径,EG:C:UsersJKDesktop导入测试.xls</param>
06./// <returns>Excel中的数据</returns>
07.private DataTable GetTable(string fileName)
08.{
09.OleDbConnection objConn = null;
10.System.Data.DataTable dt = null;
11.string connString = string.Empty;
12.OleDbDataAdapter da = new OleDbDataAdapter();
13.//获取Excel工作薄中Sheet页(工作表)名集合
14.String[] ss = this.GetExcelSheetNames(fileName);
15.DataTable dataTable = new DataTable();
16.try
17.{
18.string FileType = fileName.Substring(fileName.LastIndexOf("."));
19.if (FileType == ".xls")
20.connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
21. "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
22.else//.xlsx
23.connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties="Excel 12.0;HDR=YES;IMEX=1"";
24.// 创建连接对象
25.objConn = new OleDbConnection(connString);
26.// 打开数据库连接
27.objConn.Open();
28.
29.string sql_F = "Select * FROM [{0}]";
30.for (int i = 0; i < ss.Length;i++ )
31.{
32.da.SelectCommand = new OleDbCommand(String.Format(sql_F, ss[i].ToString() + "$"), objConn);
33.da.Fill(dataTable);
34.MessageBox.Show("第"+i+"次表中数据量="+dataTable.Rows.Count.ToString());
35.}
36.dataTable = DeleteBlank(dataTable,9);
37.MessageBox.Show("删除空行后,表中数据量=" + dataTable.Rows.Count.ToString());
38.return dataTable;
39.}
40.catch (Exception ex)
41.{
42.MessageBox.Show(ex.ToString());
43.return null;
44.}
45.finally
46.{
47.// 清理
48.if (objConn != null)
49.{
50.objConn.Close();
51.objConn.Dispose();
52.}
53.if (dt != null)
54.{
55.dt.Dispose();
56.}
57.}
58.}
59.
60.#endregion
本文URL:http://www.bianceng.cn/Programming/csharp/201410/45598.htm
#region删除指定表中的空白行
02./// <summary>
03.///删除指定表中的空白行
04./// </summary>
05./// <param name="dt">表名</param>
06./// <param name="ColNum">Excel中的列数</param>
07./// <returns>删除空白行后的DataTable</returns>
08.private DataTable DeleteBlank(DataTable dt,int ColNum)
09.{
10.if (dt == null || dt.Rows.Count==0)
11.{
12.return dt;
13.}
14.//删除其中的空行(注意for循环的形式)
15.for (int i = dt.Rows.Count - 1; i >= 0; i--)
16.{
17.DataRow row = dt.Rows[i];
18.bool flag = true;
19.//当某行的ColNum列,均为空时,改行为空
20.for (int j = 0; j < ColNum; j++)
21.{
22.object o = row[j];
23.if (o != DBNull.Value && Convert.ToString(o).Trim().Length > 0)
24.{
25.flag = false;
26.break;
27.}
28.}
29.if (flag)
30.{
31.dt.Rows[i].Delete();
32.}
33.}
34.dt.AcceptChanges();
35.//把行中DBNull列替换成空字符串
36.for (int k = dt.Rows.Count - 1; k >= 0; k--)
37.{
38.DataRow row = dt.Rows[k];
39.for (int z = 0; z < ColNum; z++)
40.{
41.object o = row[z];
42.if (o == DBNull.Value)
43.{
44.if (dt.Columns[z].DataType == typeof(string))
45.{
46.row[z] = "";
47.}
48.}
49.}
50.}
51.dt.AcceptChanges();
52.return dt;
53.}
54.#endregion
小注:读取Excel的时候,会自动处理表头。