C#编程读取与写入Excel的实用方法

需积分: 45 1 下载量 63 浏览量 更新于2024-09-11 收藏 7KB TXT 举报
"这篇文章主要介绍了如何在C#中读取Excel文件的方法,包括使用OleDb进行数据读取的示例代码。" 在C#开发中,处理Excel文件是常见的任务,尤其是在数据分析、报表生成或者数据导入导出的场景下。本篇文章主要探讨了通过OleDb数据提供程序来读取Excel文件的方法。 首先,我们可以使用OleDbConnection对象连接到Excel文件。在创建连接字符串时,需要指定提供程序(这里是Microsoft.Jet.OLEDB.4.0),数据源(即Excel文件的路径),以及扩展属性(表明是Excel 8.0格式,对应的是Excel 2003及更早版本)。例如: ```csharp string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "DataSource=" + Path + "; " + "ExtendedProperties=Excel8.0;"; ``` 接着,通过打开连接,可以使用OleDbDataAdapter和SQL查询语句从Excel工作表中获取数据。比如,以下代码读取名为“sheet1”的工作表中的所有数据: ```csharp string strExcel = "select * from [sheet1$]"; OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn); DataSet ds = new DataSet(); myCommand.Fill(ds, "table1"); ``` 值得注意的是,工作表名需要以方括号包围,如`[sheet1$]`,其中 `$` 表示整个工作表,而不是特定的行或列。 另外,如果你不确定Excel文件中的工作表名称,可以通过`GetOleDbSchemaTable`方法获取表格信息。这样可以动态地获取所有工作表的名字并进行操作: ```csharp DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); string tableName = schemaTable.Rows[0][2].ToString().Trim(); // 获取第一个工作表的名称 ``` 此外,文章还提到了如何将DataSet对象写回Excel文件。这同样使用OleDbConnection和OleDbDataAdapter,但这次是使用`Update`方法将数据写入Excel: ```csharp string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" + path1 + ";ExtendedProperties=Excel8.0;"; OleDbConnection myConn = new OleDbConnection(strCon); OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(myAdapter); myAdapter.Update(ds, "table1"); ``` 这种方法虽然简单实用,但它依赖于Jet数据库引擎,可能不支持Excel 2007及更高版本的XLSX文件。对于这些新格式,推荐使用Microsoft.ACE.OLEDB.12.0提供程序。如果需要处理大量数据或复杂的Excel功能,可以考虑使用专门的库,如EPPlus或NPOI。 C#通过OleDb读取Excel文件是快速且简单的方式,尤其适用于简单的数据交互。但在实际项目中,还需要根据具体需求和目标文件格式选择合适的方法。