【问题标题】:Getting error on calling SaveAs method调用 SaveAs 方法时出错
【发布时间】:2011-10-03 07:20:04
【问题描述】:

我正在尝试在我的 C#/Winforms 应用程序中使用 MS Excel 互操作从 excel 文件创建 csv 文件。

我在下面的代码中的 SaveAs 方法上收到此错误。

'无法访问该文件。请尝试以下方法之一:

• 确保指定的文件夹存在。 • 确保文件夹 包含文件不是只读的。 • 确保文件名 不包含以下任何字符: ? [ ] : |或者 * • 确保文件/路径名不超过 218 字符。'z

我尝试在 Workbook 的 Open(...) 方法中将 readonly 设置为 false,如下所示: Problem saving excel file after inserting data ,但仍然出现同样的错误。

在我的代码中,csv 文件路径是:C:\ 如果我将 csv 文件路径更改为 C:\SomeFolder 或某个共享 UNC 路径,则不会出现此错误。

请指教。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);

【问题讨论】:

  • 听起来像是文件夹权限问题
  • 嗨大卫,感谢您的输入。文件名为:“22010_Sep11TestReport_rtsim36_2011_09_30.Csv”。此文件名相同,如果将 csv 文件路径更改为 C:\SomeFolder 等其他路径,则我不会收到此错误,并且 csv 文件会保存在机器上。所以,看起来问题不在于文件名本身尽管错误消息似乎暗示了这一点。

标签: c# excel interop


【解决方案1】:

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


顺便说一句,您的代码错误地使用了SubStringIndexOf(".") 来获取不带扩展名的文件名。文件名中可以​​有多个句点。扩展名只是 final 句点之后的文本。考虑这些文件名以及您的代码将如何处理它们:

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

您应该使用Path.GetFileNameWithoutExtension

【讨论】:

  • 大卫,请查看我的 cmets 针对您上面的问题。谢谢。
  • 包含完整路径的文件名是什么?你在使用相对路径吗?
【解决方案2】:

Excel SaveAs 非常挑剔。 File.Exists 或打开工作簿时接受c:\folder\\file.csv(注意双反斜杠)之类的内容,但在保存时不接受

【讨论】:

    【解决方案3】:

    检查您保存的文件路径,如果它超过 218 个字符,那么您也会收到此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      相关资源
      最近更新 更多