我正在尝试更新excel中的单个单元格,以下代码在excel 2007上完美运行,我什至不需要安装AccessDatabaseEngine! 它应该工作! 但是当我在Excel 2010或2013上运行代码时。第一行仅按最后一行数据更新!例如,如果我想更新单元格 A 中的 10 行,则只有 A1 会被应该存储在 A10 中的数据更新!
我假设 ACE。OLEDB.12.0驱动程序有一些错误。我希望任何已经解决问题的人在这里分享解决方案。
请记住,我已经安装了 AccessDatabaseEngine.exe并尝试了版本 2007 和 2010 并得到了相同的结果!
我在这个几个月里有点库存,如果有人能帮忙,我真的很感激!
void my(){
string filelink = "C:\test.xlsx";
try
{
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.ACE.OLEDB.12.0;Data Source=" + filelink + ";Extended Properties="Excel 12.0 Xml;HDR=NO"");
MyConnection.Open();
myCommand.Connection = MyConnection;
sql = "UPDATE[sheet1$A1:A1] SET F1 = '" + textBox1.Text.ToString() + "'";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
sql = "UPDATE[sheet1$B1:B1] SET F1 = '" + textBox2.Text.ToString() + "'";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
sql = "UPDATE[sheet1$B2:B2] SET F1 = '" + textBox3.Text.ToString() + "'";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
MyConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
当您调用/执行多个更新命令时,请确保 在每次更新结束时,所有内容都会正确清除。我有 通过创建另一个新方法来修改您的代码,该方法将获取文件 链接和 sql命令字符串作为参数执行。
此函数的主要职责是调用给定的命令 并正确释放所有连接和命令对象,以便 下一个命令可以毫无问题地调用。
void my()
{
string filelink = "C:\test.xlsx";
sql = "UPDATE[sheet1$A1:A1] SET F1 = '" + textBox1.Text.ToString() + "'";
ExecuteMyCommand(filelink,sql);
sql = "UPDATE[sheet1$B1:B1] SET F1 = '" + textBox2.Text.ToString() + "'";
ExecuteMyCommand(filelink,sql);
sql = "UPDATE[sheet1$B2:B2] SET F1 = '" + textBox3.Text.ToString() + "'";
ExecuteMyCommand(filelink,sql);
}
private void ExecuteMyCommand(String filelink,String sql)
{
using (System.Data.OleDb.OleDbConnection MyConnection =
new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filelink +";Extended Properties="Excel 12.0 Xml;HDR=NO""))
{
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
MyConnection.Open();
myCommand.Connection = MyConnection;
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
}
}
我在几个小时内都在为同样的问题而苦苦挣扎。经过大量研究无济于事,我发现我可以更新特定单元格的唯一方法是进行插入......即使已经有现有数据,我只需要更新。试试这个:
sql = "INSERT INTO[sheet1$B2:B2] VALUES ('" + textBox3.Text.ToString() + "')"