我正在尝试将一个工作表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);
答案 0 :(得分:3)
这个@Jim的原因在于,使用SaveAs方法,您不再使用旧版本的&#39; -source-工作表,但在你目标的文件中 - 在SaveAs中。请记住,在打开“来源”之后所做的更改。工作簿不会保留在“来源”中。但是坚持在&#39;目标&#39; (SaveAs)工作簿。
因此,如果您开始使用WorkbookA.xlsm,激活SheetA,Saved SheetA作为SheetA.csv,您现在位于SheetA。 csv 中的Excel。
(注意:如果您手动执行此操作或手动运行VBA,则会产生一种奇怪的副作用,如果您的源包含两张纸,.csv似乎也有两张纸但是在重新打开.csv之后只有保存的纸张持续存在)
从这里你可以说,如果你打算继续在-source中工作 - 元步骤是: