C#使用 OleDbConnection 连接读取Excel

   /// <summary>
   /// 读取Excel中数据
   /// </summary>
   /// <param name="strExcelPath"></param>
   /// <param name="tableName"></param>
   /// <returns></returns>
   public static DataTable GetExcelTableByOleDB(string strExcelPath, string tableName)
   {
       try
       {
           DataTable dtExcel = new DataTable();
           //数据表
           DataSet ds = new DataSet();
           //获取文件扩展名
           string strExtension = System.IO.Path.GetExtension(strExcelPath);
           string strFileName = System.IO.Path.GetFileName(strExcelPath);
           //Excel的连接
           OleDbConnection objConn = null;
           switch (strExtension)
           {
               case ".xls":
                   objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=yes;IMEX=1;\"");
                   break;
               case ".xlsx":
                   objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=yes;IMEX=1;\"");
                   //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)  备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数,"HDR=No;"正好与前面的相反。"IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。 
                   break;
               default:
                   objConn = null;
                   break;
           }
           if (objConn == null)
           {
               return null;
           }
           objConn.Open();              
           //获取表名
          // string sheet = dtDATA.Rows[0][2].ToString().Trim();
           //选择指定表所有数据
           string strSql = "select * from [" + tableName + "$]";
           //选择表指定列范围
            //string strSql = "select * from [" + tableName + "A:Z]";
           //获取Excel指定Sheet表中的信息
           OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
           OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
           myData.Fill(ds, tableName);//填充数据
           objConn.Close();
           //dtExcel即为excel文件中指定表中存储的信息
           dtExcel = ds.Tables[tableName];
           return dtExcel;
       }
       catch (Exception ex)
       {
           Console.WriteLine(ex.Message + "\r\n" + ex.StackTrace);
           return null;
       }
   }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# WinForm 中读取 Excel 有多种方法,其中比较常用的是通过 OLEDB 或者 Interop.Excel 库。 使用 OLEDB: 1. 添加引用:在项目中添加对 Microsoft.Office.Interop.Excel 的引用。 2. 创建连接使用 OleDbConnection 对象创建与 Excel 文件的连接,并设置连接字符串。 3. 打开连接使用 OleDbConnection.Open() 方法打开连接。 4. 查询数据:使用 OleDbCommand 对象执行查询,并将结果存储在 OleDbDataReader 对象中。 5. 关闭连接使用 OleDbConnection.Close() 方法关闭连接。 示例代码: ```csharp string filePath = @"C:\Users\username\Documents\Book1.xlsx"; string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath};Extended Properties='Excel 12.0;HDR=YES;'"; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); string query = "SELECT * FROM [Sheet1$]"; using (OleDbCommand command = new OleDbCommand(query, connection)) { using (OleDbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { //读取数据 string value1 = reader["Column1"].ToString(); string value2 = reader["Column2"].ToString(); } } } } ``` 使用 Interop.Excel: 1. 添加引用:在项目中添加对 Microsoft.Office.Interop.Excel 的引用。 2. 创建工作簿:使用 Application 对象创建 Excel 应用程序,并打开 Excel 文件。 3. 获取工作表:使用 Workbook 对象获取要读取的工作表。 4. 读取数据:使用 Range 对象读取单元格数据。 5. 关闭 Excel 应用程序:使用 Application.Quit() 方法关闭 Excel 应用程序。 示例代码: ```csharp string filePath = @"C:\Users\username\Documents\Book1.xlsx"; Application excelApp = new Application(); Workbook excelWorkbook = excelApp.Workbooks.Open(filePath); Worksheet excelWorksheet = excelWorkbook.Sheets["Sheet1"]; Range range = excelWorksheet.UsedRange; for (int row = 1; row <= range.Rows.Count; row++) { //读取数据 string value1 = (range.Cells[row, 1] as Range)?.Value.ToString(); string value2 = (range.Cells[row, 2] as Range)?.Value.ToString(); } excelWorkbook.Close(); excelApp.Quit(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值