Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用oledb编写excel时的奇怪行为_C#_Excel_Insert_Oledb - Fatal编程技术网

C# 使用oledb编写excel时的奇怪行为

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=

我只是尝试向单元格写入任何内容,但看起来行计数在增加,即使单元格为空。例如,我在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=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]