在调用SaveAs方法时出错
我想从我的C#/ Winforms应用程序中使用MS Excel Interop的Excel文件中创build一个CSV文件。
在下面的代码中的SaveAs方法得到这个错误。
'文件无法访问。 尝试以下方法之一:
•确保指定的文件夹存在。 确保包含该文件的文件夹不是只读的。 •确保文件名不包含以下任何字符:<>? []:| 或*确保文件/path名称不超过218个字符
我试图在工作簿的打开(…)方法设置readonly为false: 插入数据后保存Excel文件问题 ,但仍然得到相同的错误。
在我的代码中,csv文件path是:C:\如果我将csv文件path更改为C:\ SomeFolder或一些共享的UNCpath,那么我不会得到这个错误。
请指教。如果使用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);
显然sTmpFileName
是一个无效的path。 错误消息告诉你。 也许m_sUserName
包含不允许的字符。 也许这是一个DOMAIN\USER
格式的用户名。 也许文件名太长了。 或者也许别的东西已经到了 看看sTmpFileName
的实际值,你会得到你的解释。
SubString
,你的代码在使用SubString
和IndexOf(".")
来获取没有扩展名的文件名时是错误的。 文件名可以有多个句点。 延期只是最后期限之后的文本。 考虑这些文件名以及代码如何处理它们:
C:\My.Folder.Name\TheFile.xls C:\MyFolder\TheFile.Name.xls
相反,你应该使用Path.GetFileNameWithoutExtension
。
Excel SaveAs相当挑剔。 像c:\folder\\file.csv
(请注意双反斜线)之类的东西被File.Exists接受,或者当您打开工作簿时,而不是保存时
检查你的FilePath,如果它是超过218个字符,那么你也会得到这个错误。