我正在使用Office.Interop.Excell库创建CSV(使用&#39 ;;'作为分隔符)文件。
以下代码在我的计算机上正常工作,但我的一个客户端有时会获得IO.Exception:'进程无法访问该文件,因为它正由另一个进程使用'。
奇怪的是,这个错误并不总是突然冒出来,有时它会起作用,有时它不会...
这可能是我客户偶尔发生IO.Exception的原因。这是我的代码:
public static void GenerateCsvFile(DataSet ds, string paramFileFullPath, Dictionary<string, string[]> tableHeaders)
{
object missing = System.Reflection.Missing.Value;
var excel = new Application { DisplayAlerts = false };
Workbook workbook = null;
try
{
workbook = excel.Application.Workbooks.Add(true);
foreach (System.Data.DataTable dt in ds.Tables)
AddTableSheet(ref workbook, ref excel, dt, true, tableHeaders[dt.TableName], false);
workbook.SaveAs(paramFileFullPath, XlFileFormat.xlTextMSDOS, missing, missing, false, false,
XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
}
finally
{
CleanupExcel(excel, workbook);
}
File.WriteAllText(paramFileFullPath, File.ReadAllText(paramFileFullPath).Replace("\t", ";"));
}
我猜这个错误有时来自这条线:
File.WriteAllText(paramFileFullPath, File.ReadAllText(paramFileFullPath).Replace("\t", ";"));
我清理/关闭Excel的方式可能有问题吗?
private static void CleanupExcel(Application excel, Workbook workbook)
{
if (excel == null)
return;
excel.DisplayAlerts = false;
excel.Quit();
if (workbook != null)
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(excel);
}
为什么这对我来说总是有用,但是在我客户的PC上它只有5次中有1次起作用......
答案 0 :(得分:2)
但我的一个客户有时会得到IO.Exception:'进程无法访问该文件,因为它正由另一个进程使用'。
我应该打赌多少基本问题是客户端在尝试运行代码时是否在Excel中保持文件打开状态? ;)