使用OleDb在C#中将数据插入到Excel 2007中

我曾经作为我想要做这个网站的基地: http : //www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=8500

所以基本上,我想在我的C#Windows窗体应用程序中使用OleDb将一些数据添加到我现有的Excel电子表格中的特定单元格。 我发现所有的例子都希望我有一些types的标题单元格。 就像如果我的'A1'单元格中有“标题”,我可以使用:

"INSERT INTO [SHEET1$] (Title) Values ('Book')" 

问题是我的Excel电子表格没有任何标题。 我需要做的是:

 "INSERT INTO [SHEET1$] (A15) Values ('Book')". 

有人可以帮我弄清楚如何将数据放在电子表格的特定单元格中吗?

如果你还有兴趣,

没有真正的方法来指定要使用OleDb插入命令写入的单元格,OleDbCommand将自动转到指定列中的下一个打开的行。 但是,您可以使用更新查询,例如:

 sql = "Update [Sheet1$A1:A15] SET A15 = 'DesiredNumber'"; myCommand.CommandText = sql; myCommand.ExecuteNonQuery(); 

这应该工作,因为你已经定义:

 System.Data.OleDb.OleDbConnection MyConnection; System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(); string sql = null; MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\Example.xls';Extended Properties=Excel 8.0;"); MyConnection.Open(); myCommand.Connection = MyConnection; 

请参阅如何使用ADO.NET在Excel工作簿中使用Visual Basic .NET检索和修改logging , url为http://support.microsoft.com/kb/316934

表命名约定

有几种方法可以在Excel工作簿中引用表(或范围):

  • 使用工作表名称后跟一个美元符号(例如,[Sheet1 $]或[My Worksheet $])。 以这种方式引用的工作簿表格包括工作表的整个使用范围。

     Select * from [Sheet1$] 
  • 使用具有定义名称的范围(例如,[MyNamedRange]):

     Select * from [MyNamedRange] 
  • 使用具有特定地址的范围(例如[Sheet1 $ A1:B10]):

     Select * from [Sheet1$A1:B10] 

插入从http://support.microsoft.com/kb/316934

我假设你正在使用标准的MS-Excel COM对象与Excel文件进​​行交互。 您可以尝试使用系统级ODBC驱动程序与Excel文件进​​行交互。 当根据是否存在头文件来使用它时,需要在oledbConnectionstring中指定相同的值,然后可以直接将值input到所需的任何单元格中。