Обновление листа Excel: невозможно обновить '(выражение)'; поле не обновляется

Итак, я новичок в.NET, и у меня возникают проблемы с использованием соединения ACE.OLEDB для изменения значений обновления на листе Excel. Я получаю сообщение об ошибке: не могу обновить '(выражение)'; поле не обновляется. Итак, структура моего рабочего листа выглядит следующим образом:

Symbol   AssetClass  MarketValue  SharePrice
ABC       formula     $1000        $10.50
MSFT      formula     $2000        $12

Поля формул содержат формулу, которая ищет символ в другой книге Excel и затем захватывает его класс активов. Проблема в том, что он не позволяет мне обновить это поле. Я изменил формат столбца на текст, чтобы посмотреть, не в этом ли проблема, но без изменений. Я не знаю, почему я не могу просто добавить формулу, как будто это текст?

Вот мой код ниже:

Private m_sConn1 As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PATH_Workbook1 & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;MAXSCANROWS=3;READONLY=FALSE\"""
Dim conn As New OleDbConnection(m_sConn1)
conn.Open()
Dim cmd As New OleDbCommand()
cmd.Connection = conn
Dim da As New OleDbDataAdapter("Select * From [HoldingsTest$]", conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "HoldingsTable")

' Generate the UpdateCommand and add the parameters for the command.
da.UpdateCommand = New OleDbCommand("UPDATE [HoldingsTest$] SET AssetClass =?, MarketValue =?, SharePrice = ? WHERE Symbol = ?", conn)
da.UpdateCommand.Parameters.Add("@AssetClass", OleDbType.VarChar).SourceColumn = "AssetClass"
da.UpdateCommand.Parameters.Add("@MarketValue", OleDbType.Currency).SourceColumn = "MarketValue"
da.UpdateCommand.Parameters.Add("@SharePrice", OleDbType.Currency).SourceColumn = "SharePrice"
da.UpdateCommand.Parameters.Add("@Symbol", OleDbType.VarChar, 9, "Symbol")

' Update records
ds.Tables(0).Rows(1)("AssetClass") = "formula"
ds.Tables(0).Rows(1)("MarketValue") = 101
ds.Tables(0).Rows(1)("SharePrice") = 91

' Apply the dataset changes to the actual data source (the workbook).
da.Update(ds, "HoldingsTable")

Любая помощь будет принята с благодарностью. Я действительно в тупике. Код выше представляет собой вариант на примере из MSDN.

1 ответ

Решение

Здесь упоминается в разделе Как использовать ADO с данными Excel из Visual Basic или VBA,

"Вы можете редактировать данные Excel с помощью обычных методов ADO. Поля набора записей, которые соответствуют ячейкам на листе Excel, содержащем формулы Excel (начинающиеся с"="), доступны только для чтения и не могут редактироваться".

К сожалению, это также относится и к соединению OLEDB с Excel.

Другие вопросы по тегам