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では、このパスセパレーターを避けるべきだと思います。

文字列の前に文字を付けて定義された逐語的な文字列@を使用する場合

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

すべてが期待どおりに機能します。

于 2012-07-15T09:08:33.167 に答える