调用SaveAs方法时出错

时间:2011-10-03 07:20:05

标签: c# excel interop

我正在尝试使用我的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);

3 个答案:

答案 0 :(得分:4)

显然sTmpFileName是无效路径。错误消息告诉您。也许m_sUserName包含不允许的字符。也许它是DOMAIN\USER格式的用户名。也许文件名真的太长了。或许还有其他事情发生了。看看sTmpFileName的实际价值,你会得到你的解释。


顺便说一句,您的代码在使用SubStringIndexOf(".")来获取没有扩展名的文件名时会出错。文件名可以包含多个句点。扩展名只是 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的保存位置,然后您也会收到此错误。

相关问题