Skip to main content
 首页 » 编程设计

c#之VSTO 另存为文件已锁定

2024年05月10日43hnrainll

我正在尝试将工作表 SaveAs() 保存到 csv 文件,并在将该 csv 文件加载到字符串后立即使用 C# VSTO。问题是,除非我关闭 () 工作簿,否则我无法访问新创建的 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); 

请您参考如下方法:

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

因此,如果您开始在 WorkbookA.xlsm 中工作,激活 SheetA,将 SheetA 另存为 SheetA.csv,那么您现在位于 Excel 中的 SheetA.csv 中。

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

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

  • 开源
  • 做出改变
  • 保存源代码(可选 - 仅当您想要更改源代码时)
  • 另存为 .csv(您现在位于 .csv 中)
  • 关闭.csv
  • 重新开源
  • 继续在 Source 上工作
  • 打开 .csv 文件以执行您计划执行的任何操作