C# Excel互操作服务不会在客户端计算机上保存工作簿

C# Excel互操作服务不会在客户端计算机上保存工作簿,c#,backgroundworker,excel-interop,C#,Backgroundworker,Excel Interop,我遇到的问题涉及到在客户端计算机上保存用C#代码创建的工作簿。该程序的发布版本在我的机器上运行得很好,但在客户机上却不能 流程概述: 当程序完成其迭代时,它将创建工作表。一旦完成,它将保存工作簿并显示一个消息框,说明导出成功,并显示已创建的工作簿 问题: 在客户端计算机上运行时,它将经历创建工作表的过程,但由于某些原因,它不会保存文件。它将excel实例保存在内存中,因此当您打开任务管理器时,您将看到该过程。此外,在运行程序并尝试关闭计算机后,它将提示您保存或不保存创建的工作簿,因为实例仍在内存

我遇到的问题涉及到在客户端计算机上保存用C#代码创建的工作簿。该程序的发布版本在我的机器上运行得很好,但在客户机上却不能

流程概述:

当程序完成其迭代时,它将创建工作表。一旦完成,它将保存工作簿并显示一个消息框,说明导出成功,并显示已创建的工作簿

问题:

在客户端计算机上运行时,它将经历创建工作表的过程,但由于某些原因,它不会保存文件。它将excel实例保存在内存中,因此当您打开任务管理器时,您将看到该过程。此外,在运行程序并尝试关闭计算机后,它将提示您保存或不保存创建的工作簿,因为实例仍在内存中。这就是我如何处理并保存工作簿,以验证程序是否创建了工作表

我的想法:

我认为windows或excel的某些设置可能会阻止保存和自动打开excel文件。我还使用后台工作人员来完成监视工作簿创建过程进度的任务,因此这可能也是一个问题

如果有人遇到这个问题或知道解决方案,请让我知道。如果需要更多信息,我可以提供

我没有包含代码,因为我发现它在了解问题发生的原因方面没有用处,因为所有的东西都在我的开发机器上工作,而不是在客户机上

编辑

我与Jared一起工作,最终能够在另一台安装了VS的机器上调试程序。事实证明,问题根本不在于save函数,而在于客户端计算机上创建的默认工作表的数量

创建工作簿时,程序应该遍历工作表并删除除第一个工作表以外的所有工作表。有一个逻辑缺陷(由我编码:/)会在工作簿中留下一张空工作表,导致此语句出现问题:

int lastRow = _excelWorksheet.Cells.Find("*", Type.Missing, Type.Missing, Type.Missing, 
                XlSearchOrder.xlByRows, XlSearchDirection.xlPrevious, false, Type.Missing, Type.Missing).Row;
显然,它不喜欢在一张空纸上寻找东西。我们的开发机器目前设置为默认为仅一张工作表,因此我们没有遇到问题


我发现奇怪的是,在调试时,程序会在该行抛出System.NullReferenceException。但是,该程序不会在客户端机器上崩溃。相反,它只会将Excel实例留在内存中,就像前面所描述的那样,然后就放在那里。正如Jared所说,excel文件在后台线程上运行,因此可能与此有关。

可能是用户权限问题,他没有写入文件位置的权限……您尝试过saveAs方法吗?它可能会提示用户覆盖该文件,并且您没有以编程方式单击“是”来覆盖该文件overwrite@PheonixReborn-这是我的想法,但文件位置是他的桌面文件夹@mikeMurf22它正在使用SaveAs()方法。老实说,我不知道从哪里开始寻找答案。这似乎是不可能的,因为我们有其他程序,在保存excel工作簿时,它们几乎做了相同的事情,但这一个不起作用。