簡體   English   中英

嘗試使用 ACE.OLEDB.12.0 更新 Excel 2010 2013 中的單元格,但只有第一行正在更新

[英]Trying to UPDATE cells in Excel 2010 2013 using ACE.OLEDB.12.0 but only 1st row is updating

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

        }

當您調用/執行多個更新命令時,請確保在每次更新結束時正確清除所有內容。 我通過創建另一種新方法修改了您的代碼,該方法將采用文件鏈接和 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();
                }
            }

我在 HOURS 中也遇到了同樣的問題。 經過大量研究無濟於事,我發現更新特定單元格的唯一方法是執行 INSERT ......即使已經存在數據並且我只需要更新。 嘗試這個:

sql = "INSERT INTO[sheet1$B2:B2] VALUES ('" + textBox3.Text.ToString() + "')"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM