4

我想用 COM 在 C# 中将一些数据写入 Excel,但保存时遇到问题。让我们看看代码:

  1. workSheet.SaveAs("c:/users/amare/sub.xls");
    

    上面的代码会报错:

    “Microsoft Excel 无法打开文件 c://users/amare/sub.xls。”

    但下面的代码工作正常:

  2. workSheet.SaveAs("c:\\users/amare/sub.xls");
    
  3. workSheet.SaveAs(@"c:\users\amare\sub.xls");
    

现在我对这种情况感到很困惑。我知道 2) 和 3) 是绝对正确的,但我习惯于编写类似 1) 的代码:

StreamWriter sw = new StreamWriter("c:/users/amare/desktop/file.txt");
sw.WriteLine("foo-bar");
sw.close();

这总是很好。所以我想知道为什么这次没有。显然 C# 在 1) 中错误地转义了路径。

4

2 回答 2

4

显然workSheet.SaveAs()对路径进行了自己的验证和修复。因此,您(理所当然地)因使用无效格式而受到惩罚。该格式通常被接受,但“通常”与“总是”不同。

于 2012-07-15T09:12:04.823 回答
1

我已经尝试过您的路径,并且可以肯定,它失败并显示一条消息,指出路径无效或不可写。我还尝试将文件写入 Documents 子文件夹(授予写入权限的位置),但再次出现相同的错误。因此,这绝对是 Excel 互操作解析器内部的一个问题。我认为,在 Windows 中,您应该避免使用此路径分隔符。

如果您使用逐字定义的字符串,则在字符串前面加上@char

workSheet.SaveAs(@"c:\users\amare\sub.xls");

一切都按预期工作。

于 2012-07-15T09:08:33.167 回答