0

我只是想向单元格写入任何内容,但即使单元格为空,行数似乎也在增加。例如,我在 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();
4

3 回答 3

1

我的同事 Juliusz 是正确的:实际上,每张表都被视为数据表......

但这不是在 Excel 中定义“表”的唯一方法:您可以在工作簿中查询命名范围或明确指定的地址:

    SELECT * FROM [Sheet1$A1:F255]

如果工作簿包含命名范围“MyTable”,定义为“=Sheet1!A1:F255”,则可以查询,如下所示:

    SELECT * FROM [MyTable]

我建议您在定义的范围内测试您的插入,其中包含一些可识别的数据,以便您可以准确地看到正在发生的事情。

哦,对聪明人说一句话:查看运行此查询是否会创建 Excel.Exe 的隐藏实例或使用的内存比您预期的要多得多...并检查退出时是否已正确清理。

于 2012-09-03T18:03:44.780 回答
0

每个工作表都被视为一个数据库表,因此对其进行的任何操作都是在集合的基础上完成的。正如史蒂夫·韦伦斯(Steve Wellens)指出的那样,如果您想在同一张表上为 F2 列输入值,则需要使用 UPDATE 语法。

另一种选择是创建一个新工作表并通过 INSERT 将值放在那里。最后,您可以添加另一张可以将这些结果合并在一起的工作表(其行为类似于 SQL 数据库中的 VIEW)

于 2012-09-03T16:43:30.340 回答
0

查看您在上面所做的事情,每次执行这段代码时,您都会在电子表格中添加一个新行。

使用 INSERT 命令会如您所愿,它会插入一个新行,即使您尝试添加没有值的数据也是如此。

如果您想解决这个问题,请在调用这段代码之前检查您添加的值不为空或不等于“”。

如果您使用的是 GUI,请在将更改提交回电子表格之前检查该值。

于 2012-09-03T16:47:06.817 回答