VSTO 另存为文件已锁定

本文关键字:锁定 文件 另存为 VSTO | 更新日期: 2023-09-27 18:31:19

我正在尝试使用 C# VSTO 将该工作表保存到 csv 文件并在将该 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);

VSTO 另存为文件已锁定

此@Jim的原因是,使用 SaveAs 方法,您不再位于"旧"-source- 工作表中,而是位于 SaveAs 中您目标的文件中。请记住,打开"源"工作簿后所做的更改不会保留在"源"中,而是保留在"目标"(SaveAs)工作簿中。

因此,如果您开始在工作簿A.xlsm中工作,激活了工作表A,将工作表A另存为工作表A.csv那么您现在在工作表A中。Excel中的csv

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

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

  • 开源
  • 进行更改
  • 保存源(可选 - 仅当您希望在源中进行更改时)
  • 保存为.csv(您现在处于.csv中)
  • 关闭.csv
  • 重新开源
  • 继续处理源
  • 打开.csv文件以执行您计划执行的任何操作