通过.Net生成Excel,做奇怪的事情

问题描述:

早上好,
我有一个奇怪的事情发生在我通过.Net创建的Excel WorkSheet中。 我加载一个现有的工作簿通过.Net生成Excel,做奇怪的事情

Dim _xlApp As New Excel.Application 
Dim _xlWorkbook As Excel.WokBook = _xlApp.Workbooks.Open(_templateFileName) 

将其设置为填充它(用于调试)之前可见

_xlApp.Visible = True 

然后我去填充现有的模板。

Private Sub GenerateOceanFreightGrid() 

     Dim columnCount As Integer = 4 ' _standardColumnCount 
     Dim columnInsertPosition As Integer = 5 

     If MyBooleanValue() Then 
      _xlSheet.Columns(4).Insert() 
      _xlSheet.Cells(7, 4) = "My Header Value" 
      columnInsertPosition += 1 
      columnCount += 1 
     End If 

在i设置断点的“私人小组根..”线,并且步骤通过线的代码行,它插入用于声明的每个变量的新列,所以在这种情况下,它将插入两个它甚至击中“如果MyBooleanValue()...”行(我可以看到它实际发生,因为Excel应用程序可见)列之前。但是,如果我不设置断点,只是让代码直接通过这不会发生。
没有多线程发生或其他任何我怀疑会对代码有任何影响的东西。 我明显的解决办法是不设置断点,我只是想知道是否有人看到过这种情况发生之前以及出于何种原因? 谢谢

+0

欢迎来到Office开发! – 2010-02-04 10:10:57

+0

是的,它迄今为止一分钟笑:) – Ben 2010-02-04 10:23:06

+0

我们正在与Excel互操作多年。不同的版本不同的服务包 - 这很难。而我们放弃了,只是买了第三方组件。 – 2010-02-04 10:27:22

我怀疑这是由于某些属性,调试器正在评估,以帮助 - 但它是一个邪恶的属性与副作用添加列。

我假设你没有任何Watch变量可以明确地做到这一点?

+0

感谢Jon,但是不,我没有任何Watch Variables设置。这很奇怪,因为如果我不在上面的例子中初始化变量,它只会插入一个流氓柱,但如果我这样做(如示例中),它会添加3列。我不太明白为什么它为每个变量添加一个列初始化,以及为什么它只在单步执行代码时发生。很奇怪。 – Ben 2010-02-04 10:22:47

+0

也会关闭调试器设置中的隐式属性评估。调试器评估ToString() – 2010-02-04 10:28:49

+0

感谢@Sergey和@Jon,我关闭了隐式属性评估,现在它做了“正确的事情”。干杯。 – Ben 2010-02-04 11:19:21