2013-07-23 3 views
1

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

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

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

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

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.

+0

Какая строка является ошибкой? – rwisch45

+0

@ rwisch45 da.Update (ds, «HoldingsTable») – Justin

+0

Попробуйте использовать только da.Update (ds) – rwisch45

ответ

5

Это упоминается здесь How To Use ADO with Excel Data from Visual Basic or VBA,

"You can edit Excel data with the normal ADO methods. Recordset fields which correspond to cells in the Excel worksheet containing Excel formulas (beginning with "=") are read-only and cannot be edited"

Это также верно для OLEDB подключения к Excel, к сожалению.

+0

Чемпион. Сэкономил мне много времени. – Mehrad

+0

По какой-то причине Microsoft заменила статью KnowledgeBase, связанную с моим ответом выше, на статью блога об очень базовом ADO. Статья, как она существовала при написании этого ответа, может быть найдена здесь (http://web.archive.org/web/20130704024651/http://support.microsoft.com/kb/257819) – barrowc

+0

Спасибо за наш Помогите. Это меня спасает. –