【问题标题】:Generating Excel through .Net doing odd things通过 .Net 生成 Excel 做一些奇怪的事情
【发布时间】:2010-02-04 10:09:16
【问题描述】:

早安,
我通过 .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

当我在“Private Sub Gen..”行设置断点并逐行执行代码时,它会为每个声明的变量插入一个新列,因此在这种情况下,它甚至会在它之前插入两列点击“If MyBooleanValue()...”行(由于 Excel 应用程序可见,我可以看到它实际发生)。但是,如果我不设置断点而只是让代码直接运行,则不会发生这种情况。
没有发生多线程或其他任何我怀疑会对代码产生任何影响的事情。 我明显的解决方法是不设置断点,我只是想知道是否有人以前见过这种情况以及出于什么原因? 谢谢

【问题讨论】:

  • 欢迎来到Office开发!
  • 是的,到目前为止笑了一分钟:)
  • 我们多年来一直在与 Excel 互操作作斗争。不同的版本不同的服务包 - 这很难。然后我们放弃了,干脆买了第三方组件。

标签: c# .net vb.net excel


【解决方案1】:

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

我假设您没有任何可以明确执行此操作的 Watch 变量?

【讨论】:

  • 感谢 Jon,但不,我没有设置任何观察变量。但这很奇怪,因为如果我不初始化上面示例中的变量,它只会插入一个流氓列,但如果我这样做(如示例中所示)它会添加 3 列。我不太明白为什么它为每个初始化的变量添加一列以及为什么它只在单步执行代码时发生。很奇怪。
  • 还在调试器设置中关闭隐式属性评估。调试器评估 ToString()
  • 感谢@Sergey 和@Jon,我关闭了隐式属性评估,现在它做了“正确的事情”。干杯。
  • @Ben 这个功能完全烂透了。并且不止一次地打败了我。断点也不会在 prop eval 上命中(VS6 调试器可能会在监视窗口 eval 上中断)。
  • @Sergey:如果 Ben 没有任何 Watch 窗口,为什么会发生这种情况?我不明白这怎么可能。你(或其他人)能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 2011-12-05
  • 2020-11-18
  • 1970-01-01
  • 2021-09-25
  • 2011-09-16
相关资源
最近更新 更多