我正在尝试使用我的C#/ Winforms应用程序中的MS Excel Interop从excel文件创建一个csv文件。
我在下面的代码中的SaveAs方法中遇到此错误。
'无法访问该文件。请尝试以下方法之一:
•确保指定的文件夹存在。 •确保文件夹 包含该文件不是只读的。 •确保文件名 不包含以下任何字符:< > ? []:|要么 *•确保文件/路径名称不超过218 characters.'z
我尝试按照以下方式在Workbook的Open(...)方法中将readonly设置为false: Problem saving excel file after inserting data,但仍然遇到同样的错误。
在我的代码中,csv文件路径为:C:\ 如果我将csv文件路径更改为C:\ SomeFolder或某些共享的UNC路径,那么我不会收到此错误。
请指教.Culd存在C驱动器的一些权限问题吗?
下面是代码:
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.DisplayAlerts = false;
xlApp.Visible = false;
wbkSrc = xlApp.Workbooks.Open(m_sSrcFil,
Type.Missing, false, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
wstSrc = (Worksheet)wbkSrc.Worksheets[sSrcSht];
//wstSrc.Activate();
rngWork = wstSrc.Cells.get_Range("H:H", System.Reflection.Missing.Value);
rngWork.NumberFormat = "General";
dteTmpDate = Convert.ToDateTime(m_sBusDate);
sTmpFileName = m_sSrcFil.Substring(0, m_sSrcFil.IndexOf(".")) + "_" +
m_sUserName + "_" + dteTmpDate.ToString("yyyy_MM_dd") + ".Csv";
wstSrc.SaveAs(sTmpFileName, XlFileFormat.xlCSV, Type.Missing,
Type.Missing, true, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
答案 0 :(得分:4)
显然sTmpFileName
是无效路径。错误消息告诉您。也许m_sUserName
包含不允许的字符。也许它是DOMAIN\USER
格式的用户名。也许文件名真的太长了。或许还有其他事情发生了。看看sTmpFileName
的实际价值,你会得到你的解释。
顺便说一句,您的代码在使用SubString
和IndexOf(".")
来获取没有扩展名的文件名时会出错。文件名可以包含多个句点。扩展名只是 final 期后的文本。请考虑这些文件名以及代码如何处理它们:
C:\My.Folder.Name\TheFile.xls
C:\MyFolder\TheFile.Name.xls
相反,您应该使用Path.GetFileNameWithoutExtension
。
答案 1 :(得分:1)
Excel SaveAs非常挑剔。 File.Exists或打开工作簿时会接受c:\folder\\file.csv
(注意双反斜杠)等内容,但保存时不会
答案 2 :(得分:0)
如果文件路径超过218个字符,请检查FilePath的保存位置,然后您也会收到此错误。