0

我正在尝试更新 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());
        }

        }
4

2 回答 2

0

当您调用/执行多个更新命令时,请确保在每次更新结束时正确清除所有内容。我已经通过创建另一种新方法修改了您的代码,该方法将文件链接和 sqlcommand 字符串作为参数执行。

该函数的主要职责是调用给定的命令并正确处理所有连接和命令对象,以便可以毫无问题地调用下一个命令。

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();
                }
            }
于 2013-11-07T03:31:05.373 回答
0

我在几个小时内都在为同样的问题苦苦挣扎。经过大量研究无济于事,我发现我可以更新特定单元格的唯一方法是执行插入......即使已经存在数据并且我只需要更新。尝试这个:

sql = "INSERT INTO[sheet1$B2:B2] VALUES ('" + textBox3.Text.ToString() + "')"
于 2015-06-18T19:19:14.223 回答