0

私はこの質問が数回提起されていることを発見しましたが、まだ決定的な答えはありません。まともな解決策はかなりの数の人々を助けるように見えます。

そのため、サーバー上に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つの動作を適切なものに組み合わせる方法です。ダウンロードしたファイルを開いて保存しようとすると、すぐ上に素敵なエラーメッセージが表示されますが、ドキュメントをダウンロードしてデフォルトのファイル名を指定する必要もあります。

乾杯、

ジェームズ

4

1 に答える 1

0

IEファイルのダウンロードコードにバグがあり、Webサーバーからのファイル転送(ダウンロード)が完了したことを確認できないため、保存しようとすると、ダウンロードした(一時)ファイルへの接続が開いたままになると思います。これにより、「共有違反」メッセージが生成されます。私はFireFoxで同じコードを試しましたが、同じ結果が得られませんでした。これは確かに、これがIE固有の問題であると私に信じさせます。

残念ながら、これはIEのバグであると私は信じているので、現在この問題に対する明確な解決策はないと思います。

于 2011-11-17T15:24:44.957 に答える