Jus*_*tin 1 .net oledb excel ms-jet-ace
好的,我是.NET新手,我在使用ACE.OLEDB连接更改Excel工作表中的更新值时遇到问题.我一直收到错误:无法更新'(表达式)'; 字段不可更新.所以我的工作表结构如下:
Symbol AssetClass MarketValue SharePrice
ABC formula $1000 $10.50
MSFT formula $2000 $12
Run Code Online (Sandbox Code Playgroud)
公式字段包含一个公式,该公式在另一个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")
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.我真的很难过.上面的代码是MSDN示例的变体.
这里提到了如何使用ADO与Visual Basic或VBA中的Excel数据,
"您可以使用常规ADO方法编辑Excel数据.对应于Excel工作表中包含Excel公式(以"="开头)中的单元格的Recordset字段是只读的,无法编辑"
不幸的是,对于OLED连接到Excel也是如此.