我只是想向一个单元格写入任何内容,但即使单元格为空,看起来行数也会递增。例如,我在列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();
答案 0 :(得分:1)
我的同事Juliusz是正确的:事实上,每张表都被视为数据表......
但这并不是在Excel中定义“表格”的唯一方法:您可以在工作簿中查询命名范围或显式指定的地址:
SELECT * FROM [Sheet1$A1:F255]
如果工作簿包含命名范围'MyTable',定义为'= Sheet1!A1:F255',则可以如下所示查询:
SELECT * FROM [MyTable]
我建议您在定义的范围内测试插入,并在其中包含一些可识别的数据,以便您可以准确地看到正在发生的事情。
哦,还有一句话要明智:看看运行此查询是否正在创建隐藏的Excel.Exe实例或使用的内存远远超出预期...并检查退出时是否正确清理了这个内容。
答案 1 :(得分:0)
每个工作表都被视为数据库表,因此对其进行的任何操作都是在设置的基础上完成的。正如Steve Wellens所指出的那样,如果你想在同一张纸上将F2值放到F2列,你需要使用UPDATE语法。
另一个选项是创建一个新工作表并通过INSERT将值放在那里。最后,您可以添加另一个可以将这些结果合并在一起的工作表(其行为类似于SQL数据库中的VIEW)
答案 2 :(得分:0)
看看你上面做了什么,每次执行这段代码时,都会在电子表格中添加一个新行。
使用INSERT命令将按预期执行,即使您已尝试添加没有值的数据,它也会插入一个新行。
如果你想绕过这个,请在调用这段代码之前检查你的添加值是否为null或等于“”。
如果您使用的是GUI,请在将更改提交回电子表格之前检查该值。