在调用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 ,你的代码在使用SubStringIndexOf(".")来获取没有扩展名的文件名时是错误的。 文件名可以有多个句点。 延期只是最后期限之后的文本。 考虑这些文件名以及代码如何处理它们:

 C:\My.Folder.Name\TheFile.xls C:\MyFolder\TheFile.Name.xls 

相反,你应该使用Path.GetFileNameWithoutExtension

Excel SaveAs相当挑剔。 像c:\folder\\file.csv (请注意双反斜线)之类的东西被File.Exists接受,或者当您打开工作簿时,而不是保存时

检查你的FilePath,如果它是超过218个字符,那么你也会得到这个错误。