C# 使用oledb编写excel时的奇怪行为
我只是尝试向单元格写入任何内容,但看起来行计数在增加,即使单元格为空。例如,我在F1列中填充了20个单元格。我在F1中插入,现在它已填充了21个单元格。然后我尝试插入F2,它下面有空单元格,但它写入F2:22。它不是应该插入到F2:1吗?我希望我明白了 代码如下:C# 使用oledb编写excel时的奇怪行为,c#,excel,insert,oledb,C#,Excel,Insert,Oledb,我只是尝试向单元格写入任何内容,但看起来行计数在增加,即使单元格为空。例如,我在F1列中填充了20个单元格。我在F1中插入,现在它已填充了21个单元格。然后我尝试插入F2,它下面有空单元格,但它写入F2:22。它不是应该插入到F2:1吗?我希望我明白了 代码如下: string conStr = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\\sample.xls';Extended Properties=\"Excel 12.0;HDR=
string conStr = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\\sample.xls';Extended Properties=\"Excel 12.0;HDR=YES;\"";
OleDbConnection oleDbCon = new OleDbConnection(conStr);
oleDbCon.Open();
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
myCommand.Connection = oleDbCon;
string sql = "Insert into [Sheet1$] (abc) values ('value')";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
oleDbCon.Close();
每个工作表都被视为一个数据库表,因此对它的任何操作都是在集合的基础上完成的。正如Steve Wellens指出的,如果您想在同一张表上为F2列添加一个值,则需要使用更新语法
另一个选项是创建一个新图纸,并通过INSERT将值放入其中。最后,您可以添加另一个工作表,该工作表可以将这些结果合并在一起(其行为类似于SQL数据库中的视图)查看上面的操作,每次执行这段代码时,您都会向电子表格添加一个新行 使用INSERT命令将如您所期望的那样,它将插入新行,即使您已尝试添加没有值的数据 如果您想绕过这个问题,请在调用这段代码之前检查您添加的值是否为null或等于“”
如果您使用的是GUI,请在将更改提交回电子表格之前检查该值。我的同事Juliusz是正确的:实际上,每个工作表都被视为一个数据表 但这不是在Excel中定义“表”的唯一方法:您可以在工作簿中查询命名范围或显式指定的地址: 如果工作簿包含命名范围“MyTable”,定义为“=Sheet1!”!A1:F255'然后可以查询,如图所示: 我建议您在定义的范围内使用一些可识别的数据测试插入,这样您就可以准确地看到发生了什么
哦,还有一句话要告诉智者:看看运行此查询是否正在创建Excel.Exe的隐藏实例,或者使用的内存是否比您预期的多得多。。。并检查出口处是否正确清理 如果插入到数据库,则会得到一个新行,为什么Excel会有所不同?你可能需要更新/这正是我担心的。好的,谢谢。您创建的软件工具的用途是什么?或者这仅仅是一个教程?您打算如何获取要添加到电子表格中的值,这将通过GUI完成吗?
SELECT * FROM [Sheet1$A1:F255]
SELECT * FROM [MyTable]