【发布时间】:2018-02-15 18:49:35
【问题描述】:
我正在使用 c# 中的 SaveAs 方法保存一个 excel 文件。但它显示如下错误:
附加信息:无法访问该文件。尝试以下方法之一:
• 确保指定的文件夹存在。
• 确保包含该文件的文件夹不是只读的。
• 确保文件名不包含以下任何字符: ? [ ] : |或 *
• 确保文件/路径名包含的字符不超过 218 个。
我的代码是这样的:
string savepath = AppDomain.CurrentDomain.BaseDirectory + @"\Salary Slips\a.xlsx";
xlwbOP.SaveAs(savepath, Excel.XlFileFormat.xlExcel12);
保存路径变量有值 savepath="D:\Application\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\Salary Slips\a.xlsx"
并且目录 :"D:\Application\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\Salary Slips\" 存在
【问题讨论】:
-
您是否尝试过像“C:\Temp\a.xlsx”这样的绝对路径?你检查文件是否存在并且没有writeLock?
-
不确定 BaseDirectory 是否返回尾部反斜杠。永远不要像这样连接路径。使用 System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Salary Slips", "a.xlsx");
-
文件系统上是否存在
"D:\Application\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\Salary Slips\"? -
尝试另存为
Excel.XlFileFormat.xlOpenXMLWorkbook而不是xlExcel12,如下所述:stackoverflow.com/questions/9769703/… -
您在使用 Excel 互操作吗?检查您的任务管理器,看看是否有一堆 Excel 实例正在运行。如果是这样,其中一个仍然可以打开您的文件,因此您无法覆盖它。这就是 Excel 互操作是邪恶的原因。我的意思是,这就是 Excel 互操作是邪恶的原因之一。如果有一堆实例正在运行(或者甚至只是一个不应该存在的额外实例),那么您已经找到了问题的解决方案,但现在您必须找到另一个问题的解决方案。
标签: c#