HTTP 応答で CSV ファイルを送信する必要があります。出力応答を CSV 形式に設定するにはどうすればよいですか?
これは機能していません:
Response.ContentType = "application/CSV";
使用text/csvが最も適切なタイプです。
Content-Disposition応答にヘッダーを追加することも検討する必要があります。多くの場合、text / csvは、InternetExplorerによってホストされているExcelのインスタンスに直接読み込まれます。これは、望ましい結果である場合とそうでない場合があります。
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
上記の場合、ファイルの[名前を付けて保存]ダイアログが表示されます。これは意図したとおりの場合があります。
CSV の MIME タイプはRFC 4180text/csvに準拠しています。
text/csvコンテンツ タイプとして使用します。
何年にもわたって、私が知っているすべてのブラウザーで見事に機能する、このための完璧なヘッダーのセットを磨いてきました。
// these headers avoid IE problems when using https:
// see http://support.microsoft.com/kb/812935
header("Cache-Control: must-revalidate");
header("Pragma: must-revalidate");
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$filename.csv");
これらの他の MIME タイプのいずれかを試してください (ここから: http://filext.com/file-extension/CSV )
また、MIME タイプでは大文字と小文字が区別される場合があります...
そのように使うだけ
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
IE の問題は、返されたデータを傍受し、送信されたと考えられるコンテンツ タイプについて独自の判断を下すことであることがわかりました。データ転送の圧縮を使用しているために、テキスト ファイルの名前を付けて保存ダイアログが常に開かれるなど、これによって引き起こされる多くの副作用があります。解決策は(phpコードで)......
header('X-Content-Type-Options: nosniff');
上記のようにコンテンツタイプとコンテンツ配置を設定すると、ブラウザによって結果が大きく異なります。
IE8:必要に応じて[名前を付けて保存]ダイアログを表示し、デフォルトのアプリとしてExcelを使用します。100%良い。
Firefox:[名前を付けて保存]ダイアログは表示されますが、Firefoxはそれがスプレッドシートであるとは認識していません。Visual Studioで開くことをお勧めします!50%良い
Chrome:ヒントは完全に無視されます。CSVデータがブラウザに表示されます。0%良い。
もちろん、これらすべての場合において、mime /アプリケーションのマッピングをカスタマイズせずに、ブラウザが箱から出てきたときに参照しています。
「myfilename.cvs」の前に「/」文字を挿入することをお勧めします
Response.AddHeader("Content-Disposition", "attachment;filename=/myfilename.csv");
より良い結果が得られることを願っています。