电竞比分网-中国电竞赛事及体育赛事平台

分享

C#用Oledb查詢Excel某個sheet中的數(shù)據(jù)

 行走在理想邊緣 2019-06-16

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

今天發(fā)表利用oledb的方式,根據(jù)多個條件進(jìn)行數(shù)據(jù)的查詢。

明天爭取做個例子,利用Office 的Excel組件來操作Excel文件

1.Excel文件第一行設(shè)置為列名:

  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我設(shè)置為了Yes,也就是說我Excel中的第一行會當(dāng)做列名,而不是數(shù)據(jù)
  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. // 這里查詢的條件我寫死了,當(dāng)然你可以動態(tài)的傳值進(jìn)來進(jìn)行查詢
  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我設(shè)置為了No,也就是說我Excel中沒有列名,每一列的輸入的值都是數(shù)據(jù)
  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. // 這里查詢的條件我寫死了,當(dāng)然你可以動態(tài)的傳值進(jìn)來進(jìn)行查詢
  27. // 如果你在連接字符串里沒有設(shè)置列名,oledb會自動生成列名,列名分別為F1,F(xiàn)2,F(xiàn)3,F(xiàn)4.........
  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版本,對于不同版本的連接字符串,請參照下面連接里的詳細(xì)說明:

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約