分享

C#用Oledb查询Excel某个sheet中的数据

 行走在理想边缘 2019-06-16

最近在研究如何操作Excel文件,目前主要研究oledb方法和利用Office 的Excel组件来操作Excel文件

今天发表利用oledb的方式,根据多个条件进行数据的查询。

明天争取做个例子,利用Office 的Excel组件来操作Excel文件

1.Excel文件第一行设置为列名:

  1. /// <summary>
  2. /// 获取OLEDB连接对象。
  3. /// </summary>
  4. /// <param name="excelPath">Excel文件的路径</param>
  5. /// <returns>OLEDB连接对象</returns>
  6. public static OleDbConnection GetOledbConnection(string excelPath)
  7. {
  8. // 这里的HDR我设置为了Yes,也就是说我Excel中的第一行会当做列名,而不是数据
  9. string conString=string.Format("Provider=Microsoft.Ace.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'",excelPath);
  10. return new OleDbConnection( conString=string.Format );
  11. }

  12. /// <summary>
  13. /// 按条件查询sheet中的信息
  14. /// </summary>
  15. /// <param name="excelPath">Excel文件的路径</param>
  16. /// <param name="sheetName">sheet名称</param>
  17. /// <returns>DataTable</returns>
  18. public DataTable GetSheetInfoByCondition(string excelPath,string sheetName)
  19. {
  20. OleDbConnection con=null;
  21. try
  22. {
  23. con = GetOledbConnection(excelPath);
  24. con.Open();
  25. OleDbCommand cmd = con.CreateCommand();
  26. // 这里查询的条件我写死了,当然你可以动态的传值进来进行查询
  27. cmd.CommandText = string.Format("select * from [{0}$] where 姓名='张三' and 年龄='25'",sheetName);
  28. OleDbDataAdapter adapter = new OleDbDataAdapter ( cmd );
  29. DataSet ds = new DataSet ();
  30. adapter.Fill(ds,sheetName);

  31. return ds.Tables[0];
  32. }
  33. catch(Exception ex)
  34. {
  35. throw ex;
  36. }
  37. finally
  38. {
  39. if(con!=null)
  40. {
  41. con.Close();
  42. }
  43. }

  44. return null;
  45. }

2.Excel文件第一列不是列名:
  1. /// <summary>
  2. /// 获取OLEDB连接对象。
  3. /// </summary>
  4. /// <param name="excelPath">Excel文件的路径</param>
  5. /// <returns>OLEDB连接对象</returns>
  6. public static OleDbConnection GetOledbConnection(string excelPath)
  7. {
  8. // 这里的HDR我设置为了No,也就是说我Excel中没有列名,每一列的输入的值都是数据
  9. string conString=string.Format("Provider=Microsoft.Ace.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=No;IMEX=1;'",excelPath);
  10. return new OleDbConnection( conString=string.Format );
  11. }

  12. /// <summary>
  13. /// 按条件查询sheet中的信息
  14. /// </summary>
  15. /// <param name="excelPath">Excel文件的路径</param>
  16. /// <param name="sheetName">sheet名称</param>
  17. /// <returns>DataTable</returns>
  18. public DataTable GetSheetInfoByCondition(string excelPath,string sheetName)
  19. {
  20. OleDbConnection con=null;
  21. try
  22. {
  23. con = GetOledbConnection(excelPath);
  24. con.Open();
  25. OleDbCommand cmd = con.CreateCommand();
  26. // 这里查询的条件我写死了,当然你可以动态的传值进来进行查询
  27. // 如果你在连接字符串里没有设置列名,oledb会自动生成列名,列名分别为F1,F2,F3,F4.........
  28. cmd.CommandText = string.Format("select * from [{0}$] where F1='张三' and F2='25'",sheetName);
  29. OleDbDataAdapter adapter = new OleDbDataAdapter ( cmd );
  30. DataSet ds = new DataSet ();
  31. adapter.Fill(ds,sheetName);

  32. return ds.Tables[0];
  33. }
  34. catch(Exception ex)
  35. {
  36. throw ex;
  37. }
  38. finally
  39. {
  40. if(con!=null)
  41. {
  42. con.Close();
  43. }
  44. }

  45. return null;
  46. }

以上两种oledb连接字符串,我使用的都是Excel2007版本,对于不同版本的连接字符串,请参照下面连接里的详细说明:

http://blog.csdn.net/sdd379733766/article/details/9838453

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约