使用vb.net作为字符串从单元格中提取Excel公式

使用vb.net作为字符串从单元格中提取Excel公式,vb.net,excel,vba,Vb.net,Excel,Vba,这有多难……至少我是这么想的。我要做的是为给定工作表中的一系列单元格提取值、颜色、注释和任何公式。最终目标是将某个人用作数据库的电子表格转换为Access表 工作表.单元格(行,列).Value“提取值有效 工作表。单元格(行、列)。Font.ColorIndex“提取颜色索引有效 工作表.单元格(行,列).Comment.Text“提取注释有效 工作表。单元格(行、列)。公式“提取公式不起作用 .Formula的返回值与.value相同。那不是我需要的。我正在寻找公式的文本表示形式(以提取公式

这有多难……至少我是这么想的。我要做的是为给定工作表中的一系列单元格提取值、颜色、注释和任何公式。最终目标是将某个人用作数据库的电子表格转换为Access表

工作表.单元格(行,列).Value
“提取值有效
工作表。单元格(行、列)。Font.ColorIndex
“提取颜色索引有效
工作表.单元格(行,列).Comment.Text
“提取注释有效
工作表。单元格(行、列)。公式
“提取公式不起作用


.Formula
的返回值与
.value
相同。那不是我需要的。我正在寻找公式的文本表示形式(以提取公式中嵌入的费率信息)。

感谢David在VBA中测试代码。在发布问题之前,我应该这样做

更新:我使用VBA测试了代码。它起作用了。所以我回到我的VB.Net代码,发现了问题。我认为VB.Net属性中有一个bug,原因如下

我有一个类ExcelSheet,其中包含对Excel.Worksheet的引用。它实现了一个索引器[row,colum],该索引器返回另一个类ExcelRange,该类保存对Excel.Range的引用。我注意到的错误是,第一个MsgBox显示公式作为字符串表示,而第二个MsgBox显示计算数据。我的快速修复方法是在构造函数中捕获公式

Private myCell As Excel.Range  
Private myFormula As String  

Friend Sub New(ByRef cell As Excel.Range)  
myCell = cell  
MsgBox(myCell.Formula,,"Constructor") 'Displays formula as string  
myFormula = myCell.Formula 'Saving formula as string  
End Sub

Public ReadOnly Property Formula() As String  
  Get  
    MsgBox(myCell.Formula,,"Property") 'Displays evaluated data  
    Return myFormula 'Return formula saved as string in constructor  
  End Get  
End Property

这解决了我的问题,但我很好奇VB.Net为什么会这样做。

在VBA中对我有效。有什么你没告诉我们的吗?电子表格里有什么?同意大卫的观点。你确定这个细胞有公式吗?