尝试将Excel Interop与C#.NET一起使用时遇到问题。
我试图遍历大量的工作簿/工作表并在每个工作表的范围内存放数据数组,因为我遍历我打开的工作表,获取范围,设置范围编号格式,并删除我的值进入范围,然后保存并关闭,并清理所有物体。
这一切都运行良好一段时间。但是,在进程中看似随机的文件将以只读模式打开,这会导致SaveAs停止并显示一个对话框(当这应该在后台运行时)。
一些事实: 在我的Workbooks.Open()语句中,我将ReadOnly设置为false,将IgnoreRecommendedReadOnly设置为true,并将Notify设置为false,这不仅应该阻止工作表以只读方式打开,如果文件无法打开也应该抛出错误在读/写。由于某些原因,这似乎没有用,因为随机只读访问仍然会发生。
我在HoldWhileFileIsOpen(字符串)中使用sleep命令来暂停程序并等待excel文件在使用excel文件之前和之后完全可用(它将暂停直到文件未使用{{1打开作为测试,这应该阻止我的程序打开此文件,直到它由于FileShare.None而100%未使用/可用,但我在保存excel文件时仍然会收到这些只读错误。
我正在使用SaveAs覆盖已更改版本的原始文件。
我正在关闭所有COM对象并释放它们,excel应用程序完全退出每次迭代,并且任务管理器不再显示excel每次运行。
我不会在任何地方打开这些电子表格或Excel本身,也不会在下面的代码段之外的任何地方触摸这些文件。
我想强调这些似乎是随机的,我可以迭代并保存相同的电子表格50次以上,转到下一个电子表格,迭代30次,然后点击此错误。然后下一次运行我将只能在第一个电子表格再次发生之前迭代10次。它与特定工作簿或工作表无关。
我的代码:
FileStream theFile = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
任何帮助都会让我感到很欣慰,我不确定这里发生了什么,或者为什么Interop会在处理这些文件时随意选择让我搞砸。