通过双击现有文件

时间:2015-06-08 18:32:14

标签: excel debugging visual-studio-2013 vsto

我在我开发的Excel VSTO 4.0 C#加载项中有一个错误,但只有在双击现有文件才能启动Excel时才会出现错误。我试图找到启动VS2013调试器的方法,以便我可以放入一些断点,但我试图启动调试器的方式都没有模仿双击启动Excel的过程在一个档案上。

到目前为止我尝试过的方式:

  • 启动Excel本身,然后附加到流程
  • 双击Excel文件,然后附加到生成的过程
  • 在“开始操作”下的VS项目“调试”属性中,在“启动外部程序”框中输入Excel Excel.exe的路径,并在命令行参数框中输入现有Excel文件的路径
  • 将Excel.exe作为新的现有项目添加到我的VS解决方案中,并将现有文件的路径作为项目属性中的参数,将其设置为解决方案的启动项目。

启动调试器的这些方法都没有重现错误。还有另一种方法可以在双击文件以启动Excel时开始调试吗?

对于它的价值,我遇到的错误是当Excel尚未运行时双击现有文件时将创建一个空工作簿。我需要找出创建空文件的位置/原因。如果Excel已在运行并且您双击文件以将其打开,则不会发生这种情况。

3 个答案:

答案 0 :(得分:1)

这对我有用:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
  System.Diagnostics.Debugger.Launch();

  ...
}

答案 1 :(得分:0)

尝试使用任何日志记录机制来记录代码中的任何操作。因此,您将能够在运行时找到代码中发生的事情。例如,您可以将操作写入日志文件。您可能会发现log4net库很有用。

答案 2 :(得分:0)

我假设您在处理WorkbookOpen事件的方法中使用断点。

当您双击Excel文件时,它会被加载并引发事件WorkbookOpen。 VSTO加载项尚未加载,因此您无法获得该事件。加载工作簿后,Excel加载VSTO加载项。

因此,当加载加载项时,AddinStartup的处理程序就会生效。 在vb.net中,处理程序行显示为...

Private Sub ThisAddIn_Startup() Handles Me.Startup

您现在可以在ThisAddIn_Startup

中检查已加载的工作簿
If Application.ActiveWorkbook IsNot Nothing Then
    DoSomething(Application.ActiveWorkbook)
End If

模仿其中一些调试的另一种方法是打开文件并关闭文件,手动使用excel选项加载和卸载插件。

  1. 在Addin_Startup上添加断点。

  2. 开始VSTO项目的正常调试。

  3. 加载文件。

  4. 进入excel选项并通过取消选中来卸载您的插件。

  5. 进入excel选项并通过检查加载您的插件。