簡體   English   中英

使用vb.net寫入Excel工作表時出錯

[英]Error when writing to excel worksheet using vb.net

嘗試使用VB.net 2005寫入excel工作表時收到錯誤消息

操作必須使用可更新的查詢

我通過了S / O搜索結果
https://stackoverflow.com/search?q=Operation+must+use+an+updateable+query
但沒有任何回應可以解決我的問題。

我的代碼是:

Dim strXLScn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & xlsFilePath.Text & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""

        Dim XLConn As New OleDb.OleDbConnection(strXLSconn)
        Dim XLcmd As New System.Data.OleDb.OleDbCommand
        Dim sSQLWriteToExcel As String

        strExcel = "INSERT INTO [Sheet1$A1:A1] Values ('" & sCity & "')"

        Dim oleCMD As New OleDb.OleDbCommand(strExcel, XLConn)
        Dim oleDA As New OleDb.OleDbDataAdapter(oleCMD)

        XLConn.Open()
        XLcmd.Connection = XLConn

        XLcmd.CommandText = strExcel
        XLcmd.ExecuteNonQuery()
        XLConn.Close()

有任何想法嗎?

首先,請確保已將Option Explicit ON啟用,這將有助於嘗試使用從未聲明過的變量。 其次,從連接字符串的末尾刪除IMEX = 1。 第三,確保您的excel文檔具有標題行。 這段代碼對我有用:

     Dim strXLScn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""C:\Temp\test.xls"";Extended Properties=""Excel 8.0;HDR=Yes"""

    Dim XLConn As New OleDb.OleDbConnection(strXLScn)
    Dim XLcmd As New System.Data.OleDb.OleDbCommand
    Dim strExcel As String
    Dim sCity As String = "Sydney"
    strExcel = "INSERT INTO [Sheet1$] Values ('" & sCity & "')"

    Dim oleCMD As New OleDb.OleDbCommand(strExcel, XLConn)
    Dim oleDA As New OleDb.OleDbDataAdapter(oleCMD)

    XLConn.Open()
    XLcmd.Connection = XLConn

    XLcmd.CommandText = strExcel
    XLcmd.ExecuteNonQuery()
    XLConn.Close()

(這種方法不是在VB中,而是在C#中。但是我認為它很簡單而且很短,應該可以輕松地轉換為VB。)

我發現這篇文章和其他一些文章很有用。 這是我想出的。 它可以在VS2010中使用。

請注意,Excel工作表具有標題。 因此,連接字符串中的“ HDR =是”。

這是我將如何在C#中格式化字符串。 它使用String變量(代理)和結構(地址):

“ INSERT INTO [Agencys $]([Agency],[Street1],[Street2],[City],[郵政編碼],[國家/地區代碼])VALUES('“ +代理商+”','“ +地址.Street1.Replace(“'”,“”“)+”','“ +地址.Street2.Replace(”'“,”“”)+“','” + Address.City.Replace(“ '“,”“”)+“','” + Address.PostalCode.Replace(“'”,“”“)+”','“ + Address.Country.Replace(”'“,”'' “)+”')“

請注意,該工作表被調出(“代理機構列表”),每個字段/標題(例如“ [Agency]”)都放在方括號中,並且String.Replace方法用於處理嵌入的單引號(tick)標記。

干杯!

public void InsertExcelData(String fileName, String sqlString)
{
    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;\";";

    OleDbConnection connection = new OleDbConnection(connectionString);

    OleDbCommand command = new OleDbCommand(connectionString, connection);

    command.CommandText = sqlString;

    // Connect to the worksheet
    connection.Open();

    // Do the Insert
    command.ExecuteNonQuery();

    // Clean up
    connection.Close();
    connection.Dispose();
}

暫無
暫無

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

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