VSTO SaveAs 文件被锁定
Posted
技术标签:
【中文标题】VSTO SaveAs 文件被锁定【英文标题】:VSTO SaveAs file locked 【发布时间】:2016-01-21 23:24:08 【问题描述】:我正在尝试使用 C# VSTO 将工作表 SaveAs() 保存为 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);
【问题讨论】:
您要读取被另一个进程锁定的文件。试试这个解决方案。 ***.com/questions/3560651/… 我看不出这个问题与 VBA 有什么关系?为什么是 VBA 标签?如果不涉及 VBA,请编辑问题并删除标签... @CindyMeister 因为同样的事情也发生在 VBA 上。 【参考方案1】:@Jim 的原因是,使用 SaveAs 方法,您不再位于“旧”-source- Worksheet 中,而是位于 SaveAs 中的目标文件中。请记住,打开“源”工作簿后所做的更改不会保留在“源”中,而是保留在“目标”(SaveAs)工作簿中。
因此,如果您开始在 WorkbookA.xlsm 中工作,激活 SheetA,将 SheetA 保存为 SheetA.csv,那么您现在在 SheetA 中。csv 在 Excel 中。
(注意:如果您手动执行此操作或通过手动运行 VBA,这会产生一个奇怪的副作用,即如果您的源包含两个工作表,.csv 似乎也有两个工作表,但在重新打开 .csv 后,只有保存的工作表被持久化了)
由此您可以说,如果您打算继续在 -source- 中工作,元步骤是:
开源 进行更改 保存源(可选 - 仅当您想要更改源时) 另存为 .csv(您现在在 .csv 中) 关闭 .csv 重新开源 继续在 Source 上工作 打开 .csv 文件以执行您计划执行的任何操作【讨论】:
感谢您的解释。所以基本上我遵循的过程是正确的:将工作表复制到空白工作簿,然后保存并关闭它,然后我可以访问该文件。以上是关于VSTO SaveAs 文件被锁定的主要内容,如果未能解决你的问题,请参考以下文章
SaveAs 方法被配置为需要有根路径,而路径 <blah> 是没有根的