簡體   English   中英

使用OleDb更新Excel工作表

[英]Updating Excel Sheet Using OleDb

我正在嘗試更新Excel工作表的單個單元格。 注意,在下面的示例代碼中,我在列和行中使用變量,因為這會根據程序的其他部分而改變,但是出於調試目的,我分別將它們設置為A和1。

現在,我在查詢表達式'06:31 PM'中收到一條錯誤消息“語法錯誤(缺少運算符)”。

請不要簡單地建議我進行參數設置,因為我知道這不能解決我的問題,並且我不擔心注射。

預先感謝大家。

        string newColumn = "A";
        string newRow = "1";
        string worksheet2 = strMonth;

        var cnnStr2 = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", textBox1.Text);
        var cnn2 = new OleDbConnection(cnnStr2);

        cnn2.Open();

        string sql2 = String.Format("UPDATE [{0}$] SET {1}{2}={3}", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8));
        OleDbCommand objCmdSelect = new OleDbCommand(sql2, cnn2);
        objCmdSelect.ExecuteNonQuery();

        cnn2.Close();

編輯:基於Gerhard建議的鏈接,我將命令文本更改為以下內容:

string sql2 = String.Format("UPDATE [{0}${1}{2}:{1}{2}] SET F1='{3}'", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8));

現在,這將產生錯誤“操作必須使用可更新的查詢”。 不知道現在該怎么辦。 {1} {2}:{1} {2}給出工作表{0} $上的單個單元格范圍,如果在連接字符串中沒有使用HDR =指定的列名,則F1是給定的默認列名。沒有。 最后,{3}是我用來更新單元格的子字符串,並且用單引號引起來,只是因為這似乎每個人都在做。 如果刪除單引號,只會產生另一個錯誤。

我編輯的命令字符串正確。 但是,要擺脫新錯誤,我必須在連接字符串中刪除“ IMEX = 1”。 並非100%知道為什么這可以使它起作用,但是確實可以。

在查找有關使用oledb命令的內容時,我注意到的一件事是,許多人(如我)似乎與命令的每個部分的實際功能相混淆。 我仍然不完全了解您可以添加到其中的一些特殊內容,例如“ WHERE”,但是我想在這里添加一些內容,以幫助發現此問題並有類似問題的任何人。

在SELECT語句中,如果要選擇單個單元格,則可以使用以下內容:

string commandString = String.Format("SELECT * FROM [{0}${1}{2}:{1}{2}]", worksheetName, column, row);

“ SELECT * FROM”將選擇“ worksheetName”中的所有內容。 然后,您必須在工作表的名稱后加上“ $”。 接下來,“ {1} {2}:{1} {2}”是您要選擇的單元格范圍。 在這里,通過使冒號兩側的列和行相同,您可以選擇單個單元格的范圍。 例如,“ E3:E3”將僅選擇單元格E3中的內容。

在UPDATE語句中,如果要更新單個單元格,則可以使用類似以下內容的方法:

string commandString = String.Format("UPDATE [{0}${1}{2}:{1}{2}] SET F1='{3}'",worksheetName, column, row, data);

這里唯一要注意的區別是“ SET F1 ='{3}'”。 這會將您在范圍內指定的單元格設置為數據變量中的值。 注意使用“ F1”。 這只是在連接字符串中指定“ HDR = NO”時使用的默認值,換句話說,沒有列標題或名稱。 如果您有列標題,則可以使用它代替F1。 在這里重要的是要了解F1絕不對應於單元格F1。

我在這個問題上度過了一個周末。 最后,我可以解決。 我將連接字符串更改為:

Microsoft.Jet.OLEDB.4.0;數據源='文件路徑';擴展屬性='Excel 8.0'

沒有IMEX或HDR選項。 以前,我檢查並更改了Excel文件中的cellprotection檢查。 希望這對其他人有幫助。

暫無
暫無

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

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