VSTO Bug - GetVstoObject返回错误的工作表

时间:2015-07-03 21:45:28

标签: vb.net excel vsto add-in

我正在使用VS2013上的VSTO为Excel开发应用程序级加载项。我的代码适用于我的所有工作表,除了一个。我发现函数GetVstoObject返回的页面不同于作为参数给出的表格。

这是我的即时窗口:

?sheet.Name
"Sheet2"
?Globals.Factory.GetVstoObject(sheet).Name
"Sheet1"

为什么会这样?我读到这个返回只计算一次,对于后续调用,返回缓存的值。有一些方法可以清除此缓存吗?

编辑:

在这个工作簿上,我有两个工作表,第一个名为" Sheet1"第二个名为" Sheet2"。我从未重命名或复制其中一张表,我刚刚开始使用新工作簿并创建了一个额外的工作表。

这是我的调试代码:

Dim sheet1 As Microsoft.Office.Interop.Excel.Worksheet = formMapeamento.wb.Worksheets.Item(1)
Dim sheet2 As Microsoft.Office.Interop.Excel.Worksheet = formMapeamento.wb.Worksheets.Item(2)

Dim sheet1_vsto = Globals.Factory.GetVstoObject(sheet1)
Dim sheet2_vsto = Globals.Factory.GetVstoObject(sheet2)

Dim sheet1_vsto_inner = sheet1_vsto.InnerObject
Dim sheet2_vsto_inner = sheet2_vsto.InnerObject

这是我现在的直接窗口,有更多数据。

'Checking "Sheet1". Everithing looks as expected
?sheet1.Name
"Sheet1"
?sheet1.Index
1
?sheet1.CodeName
"Sheet1"
?Globals.Factory.HasVstoObject(sheet1)
True
?sheet1_vsto.Name
"Sheet1"
?sheet1_vsto.Index
1
?sheet1_vsto.CodeName
"Sheet1"
?sheet1_vsto_inner.Name
"Sheet1"
?sheet1_vsto_inner.Index
1
?sheet1_vsto_inner.CodeName
"Sheet1"

'Checking "Sheet2". STRANGE VALUES
?sheet2.Name
"Sheet2"
?sheet2.Index
2
?sheet2.CodeName
"Sheet1"
?Globals.Factory.HasVstoObject(sheet2)
False
?sheet2_vsto.Name
"Sheet1"
?sheet2_vsto.Index
1
?sheet2_vsto.CodeName
"Sheet1"
?sheet2_vsto_inner.Name
"Sheet1"
?sheet2_vsto_inner.Index
1
?sheet2_vsto_inner.CodeName
"Sheet1"

这个问题突然开始发生了。在此之前,两张纸都返回了正确的值。在我运行代码一段时间之后(代码迭代某些范围,在工作表上添加和删除窗口组合框,在CustomXMLParts上显示一些表单和写入)sheet2_vsto开始响应为sheet1_vsto。我保存了这个工作簿来研究这个问题,以避免我的用户发生这种情况。

我无法再次重现这个问题。这是我第一次看到这种奇怪的行为。我认为问题的根源在CodeName的{​​{1}}。

有没有人知道这个问题的一些解决方法,或者出现这种情况的原因?

0 个答案:

没有答案