VSTO SaveAs文件已锁定

时间:2016-01-21 23:24:08

标签: c# excel vba vsto

我正在尝试将一个工作表SaveAs()一个工作表转换为csv文件,并在使用C#VSTO将csv文件加载到字符串后立即执行。问题是除非我关闭()工作簿,否则我无法访问新创建的csv文件。该错误与“文件锁定”问题有关。如果我关闭工作簿或将其复制到空白工作簿,那么我总是能够访问该文件,但这些并不是理想的解决方案。关于如何避免文件锁定的任何想法?

   Excel.Worksheet sheet = workbook.Sheets[sheetName];
   sheet.Activate();
   sheet.Unprotect();
   sheet.SaveAs(fileName, Excel.XlFileFormat.xlCSV, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);

   workbook.Close();  <-- Don't want that happen

  // Get the Input CSV.
   string contents = File.ReadAllText(InputCsvFileName);

1 个答案:

答案 0 :(得分:3)

这个@Jim的原因在于,使用SaveAs方法,您不再使用旧版本的&#39; -source-工作表,但在你目标的文件中 - 在SaveAs中。请记住,在打开“来源”之后所做的更改。工作簿不会保留在“来源”中。但是坚持在&#39;目标&#39; (SaveAs)工作簿。

因此,如果您开始使用WorkbookA.xlsm,激活SheetA,Saved SheetA作为SheetA.csv,您现在位于SheetA。 csv 中的Excel。

(注意:如果您手动执行此操作或手动运行VBA,则会产生一种奇怪的副作用,如果您的源包含两张纸,.csv似乎也有两张纸但是在重新打开.csv之后只有保存的纸张持续存在)

从这里你可以说,如果你打算继续在-source中工作 - 元步骤是:

  • 开源
  • 进行更改
  • 保存来源(可选 - 仅当您要在源中进行更改时)
  • SaveAs .csv(您现在位于.csv)
  • 关闭.csv
  • 重新开源
  • 继续使用Source
  • 打开.csv文件以执行您计划执行的任何操作