我遇到的问题涉及在客户端计算机上保存用 C# 代码创建的工作簿。该程序的已发布版本可以在我的机器上完美运行,但不能在客户端上运行。
过程概述:
当程序完成迭代后,它将创建工作表,一旦完成,它将保存工作簿并显示一个消息框,说明导出成功并显示创建的工作簿。
问题:
在客户端机器上运行时,它将完成创建工作表的过程,但由于某种原因,它不会保存文件。它将excel的实例保留在内存中,因此当您打开任务管理器时,您将看到该过程。此外,在您运行程序并尝试关闭计算机后,它会提示您保存或不保存创建的工作簿,因为实例仍在内存中。这就是我如何解决并保存工作簿以验证程序确实创建了工作表。
我的想法:
我在想可能有一些针对 windows 或 excel 的设置会阻止 excel 文件被保存并自动打开。我也在使用后台工作者来完成监视工作簿创建过程的进度的任务,所以这也可能是一个问题。
如果有人遇到此问题或知道解决方案,请告诉我。如果需要更多信息,那么我可以提供。
我没有包含代码,因为我没有发现它有助于了解为什么会发生问题,因为一切都在我的开发机器上运行,而不是客户端。
编辑
我与 Jared 一起工作,终于能够在另一台安装了 VS 的机器上调试程序。事实证明,问题根本不在于保存功能,而在于客户端计算机上创建的默认工作表数量。
创建工作簿时,程序应该遍历工作表并删除除第一个之外的所有工作表。有一个逻辑缺陷(由我编码:/)会在工作簿中留下一个空工作表,从而导致此语句出现问题:
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 的东西在后台线程上运行,所以可能与它有关。