VSTO SaveAs文件被locking

我正在尝试将SaveAs()工作表放到csv文件中,并在使用C#VSTO将该csv文件加载到string后立即生效。 问题是,除非我Close()工作簿,我不能访问新创build的CSV文件。 该错误与“文件locking”问题有关。 如果我closures工作簿或将其复制到空白工作簿,那么我总是能够访问该文件,但这些都不是理想的解决scheme。 任何想法,关于如何避免文件locking?

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); 

这个@Jim的原因是,使用SaveAs方法,您不再是在“旧”源文件夹中,而是在“另存为”文件中的目标文件中。 请记住,打开“源”工作簿之后所做的更改不会保留在“源”中,而是会保留在“目标”(SaveAs)工作簿中。

因此,如果您开始在WorkbookA.xlsm中工作,则激活SheetA,将SheetA.csv中的SheetA保存为SheetA。 Excel中的csv

(注意:如果您手动执行此操作或通过手动运行VBA,则会产生一个奇怪的副作用,即如果您的源文件包含两张工作表,.csv也显示为有两个工作表,但在重新打开.csv后,只保存保存的工作表)

从这里你可以说,如果你打算继续在源头上工作,元步骤是:

  • 开源
  • 做出改变
  • 保存源文件(可选 – 只有当您需要源中的更改时)
  • SaveAs .csv(你现在在.csv中)
  • closures.csv
  • 重新开放源代码
  • 继续在Source上工作
  • 打开.csv文件来做任何你打算做的事情