C#操作Excel:方法对比与实现

需积分: 50 26 下载量 104 浏览量 更新于2024-09-08 收藏 95KB PDF 举报
“C#操作EXCEL(多种方法比较)” 在C#中操作Excel文件有多种方式,本文将探讨两种常见的方法:一种是利用查询表的方式将Excel数据填充到DataSet控件中,另一种是逐个单元格进行读写操作。这两种方法各有优缺点,适用于不同的场景。 1. 查询表的方式查询并显示在数据集控件上 这种方法使用的是OLEDB数据提供程序来连接Excel文件,将Excel工作表视为数据表进行操作。首先,定义一个连接字符串(如`strCon`),其中包含了Excel文件的位置和版本信息。然后,创建一个`OleDbConnection`对象,并打开连接。接着,构造一个SQL查询语句,如`"select * from [Sheet1$]"`,该语句会选取名为"Sheet1"的工作表的所有行。使用`OleDbDataAdapter`填充数据集(`ds`),并将其绑定到数据控件(如`datagrid1`)上。这种方式简单且快速,适合于读取数据展示或处理。 ```csharp string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\08.xls;ExtendedProperties=Excel8.0"; OleDbConnection conn = new OleDbConnection(strCon); string sql = "select * from [Sheet1$]"; conn.Open(); OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon); DataSet ds = new DataSet(); myCommand.Fill(ds, "[Sheet1$]"); conn.Close(); datagrid1.DataMember = "[Sheet1$]"; datagrid1.DataSource = ds; datagrid1.DataBind(); ``` 2. 逐个单元格进行插入 当需要更精确地控制每个单元格的读写时,可以使用.NET Framework中的Excel Interop库。这种方法通常涉及创建Excel应用程序实例,打开或创建工作簿,然后通过API访问单元格。例如,下面的代码片段展示了如何遍历Excel工作表,读取或写入单元格内容: ```csharp string str = @"DataSource=IT-428E4EA4B0C7\SQLEXPRESS;Initial Catalog=TestBase;IntegratedSecurity=True"; SqlConnection conn = new SqlConnection(str); conn.Open(); int n = 0; for (int i = 1; i < 20; i++) { if (n > 3) break; else if (msheet.Cells.get_Range("A" + i, Type.Missing).Text.ToString() == "" && n <= 3) n++; else { // 循环获取或设置excel单元格的值,执行SQL语句等操作 } } conn.Close(); ``` 在这个例子中,代码首先打开一个SQL数据库连接,然后遍历Excel工作表的"A"列,检查单元格是否为空,如果符合条件则执行相应的业务逻辑,如插入数据到数据库。 这两种方法各有适用的场景。查询表的方式更适合快速读取和展示大量数据,而逐个单元格操作则适用于需要对单个单元格进行复杂操作的情况,如格式化、计算或者与数据库交互。需要注意的是,使用Excel Interop库可能需要Excel客户端在运行机器上安装,而且性能不如OLEDB方式高效。在选择具体的方法时,应根据项目需求和环境限制来权衡。