【问题标题】:Updating an Excel worksheet: Cannot update '(expression)'; field not updateable更新 Excel 工作表:无法更新“(表达式)”;字段不可更新
【发布时间】:2013-07-22 18:50:26
【问题描述】:

好的,我是 .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 示例的变体。

【问题讨论】:

  • 错误发生在哪一行?
  • @rwisch45 da.Update(ds, "HoldingsTable")
  • 尝试只使用 da.Update(ds)
  • @rwisch45 现在会导致此错误:更新无法找到 TableMapping['Table'] 或 DataTable 'Table'。
  • From here - "您可以使用普通的 ADO 方法编辑 Excel 数据。对应于包含 Excel 公式的 Excel 工作表中的单元格的记录集字段(以“=”开头)是只读的,并且无法编辑”-我认为这可能会影响到 Excel 的任何 OLE DB 连接,不幸的是

标签: .net excel oledb ms-jet-ace


【解决方案1】:

这里提到了How To Use ADO with Excel Data from Visual Basic or VBA

"您可以使用普通的 ADO 方法编辑 Excel 数据。记录集字段 对应于包含 Excel 的 Excel 工作表中的单元格 公式(以“=”开头)是只读的,不能编辑”

不幸的是,OLEDB 与 Excel 的连接也是如此。

【讨论】:

  • 冠军。为我节省了很多时间。
  • 出于某种原因,Microsoft 已将我上面答案中链接的知识库文章替换为关于非常基本的 ADO 的博客类型文章。可以找到撰写此答案时存在的文章here
  • 感谢您的帮助。它救了我。
猜你喜欢
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 2016-10-14
  • 1970-01-01
相关资源
最近更新 更多