私はこの質問が数回提起されていることを発見しましたが、まだ決定的な答えはありません。まともな解決策はかなりの数の人々を助けるように見えます。
そのため、サーバー上にExcelファイル(.xlsx)を作成し、content-disposition'attachment'を使用してクライアントにダウンロードします。[保存を開く]ダイアログが表示され、[保存]、[開く]、[名前を付けて保存]の順に選択すると、すべて正常に機能します。ただし、[開く]を選択して[保存...]ボタンを押すと、Excelがしばらくハングし、次のメッセージが表示されます。共有違反のため、変更を'Export[5].xlsx'に保存できませんでした。別のファイルに保存してみてください。次に:開こうとしているファイル'F8CAC020.IE5 \ HM2NBE5C \ F8CAC020'は、ファイル拡張子で指定された形式とは異なる形式です。ファイルを開く前に、ファイルが破損しておらず、信頼できるソースからのものであることを確認してください。今すぐファイルを開きますか?次に:最終的に[名前を付けて保存:]ダイアログが表示されます([はい]を押したと仮定します)。
ファイルを作成するためのコードは次のとおりです。
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("content-disposition", "attachment;filename=Export.xlsx")
Response.AddHeader("Content-Length", New System.IO.FileInfo(NewFile).Length)
Response.TransmitFile(NewFile)
Response.Flush()
content-dispositionヘッダーを削除すると、Excelで正しい種類の動作が得られますが、名前が間違っており、Excelドキュメントが代わりにブラウザーに表示されないという保証はありません(クライアントの設定によって異なります)。[開く]、[保存]の順に押すと、次のメッセージが表示されます。「default.aspx」は読み取り専用です。コピーを保存するには、[OK]をクリックし、[名前を付けて保存]ダイアログボックスでブックに新しい名前を付けます。
したがって、問題は、2つの動作を適切なものに組み合わせる方法です。ダウンロードしたファイルを開いて保存しようとすると、すぐ上に素敵なエラーメッセージが表示されますが、ドキュメントをダウンロードしてデフォルトのファイル名を指定する必要もあります。
乾杯、
ジェームズ