トップ回答者
Excelが開かない

質問
-
印刷をExcelから行おうと思い下記のような記述をしました.
Response.AddHeader("content-disposition", "attachment;filename=foo.xml");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
Excelが開くのを期待していたのですが,ブラウザが表示してしまいました.
中身がXMLのまま
Response.AddHeader("content-disposition", "attachment;filename=foo.xls");
と書き換えるとExcelは起動したのですがXMLファイルとは認識してくれません.
クライアントのWindowsのフォルダオプションでxmlを開くアプリケーションにExcelを設定すると正常に開けるのですが,
全てのクライアントで設定するのは面倒です.(プログラムで設定出来ますでしょうか?)
Response.ContentType = "application/vnd.ms-excel";
を有効にする方法は無いものでしょうか?
回答
-
ブラウザの挙動なので制御できません。
例えばFirefoxで試したところ、Content-Typeに従いExcelが起動しました。
また、IE8には「X-Content-Type-Options: nosniff」を与えるとContent-Typeに従うはずですが、ダウンロードファイルには効果がありませんでした。
あと、XML内に「<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?>」と書いておくとWindows ExplorerはExcelファイルであると認識しますが、Internet Explorerは認識しませんでした。- 回答としてマーク curex24 2009年4月28日 14:26
すべての返信
-
-
中身は問題無いんです.
Windows上でサフィックスが.xmlのファイルをダブルクリックすると一般的にはExcelではなくブラウザが開くと思うのですが,
期待としては,そのフォルダオプションよりも
Response.ContentType = "application/vnd.ms-excel";
が優先されExcelが開いて欲しかったのですが,そうはならなかったって事なんです.
一旦保存してExcelから開く事は出来ますが,出来ればダウンロード時のダイアログで「開く」を選んだ時にExcelが起動して欲しいのです.
フォルダオプションで.xmlを開くアプリケーションを変更すればExcelが起動してくれますが,各端末でそうした手間を掛けたくないので,
何か良い方法は無いでしょうか? -
ブラウザの挙動なので制御できません。
例えばFirefoxで試したところ、Content-Typeに従いExcelが起動しました。
また、IE8には「X-Content-Type-Options: nosniff」を与えるとContent-Typeに従うはずですが、ダウンロードファイルには効果がありませんでした。
あと、XML内に「<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?>」と書いておくとWindows ExplorerはExcelファイルであると認識しますが、Internet Explorerは認識しませんでした。- 回答としてマーク curex24 2009年4月28日 14:26
-
XMLを一旦、読み込んでResponse.Writeすると、開くことが出来るかも知れません。
1.foo.xmlを読み込む
2.Response.AddHeader("content-disposition", "attachment;filename=foo.xls"); ←拡張子はxlsで!!
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
3.Response.Write(1で読み込んだ内容)
4.Response.End
こんな感じでいかがでしょうか。 -
> 中身は問題無いんです.
中身が問題だと言っているのではなく、どのようにして xml ファイルをサーバーからクライアントに
ダウンロードしているのかを質問しているのですが。やり方を間違えなければうまくいくはずなんですけど。
自分の環境(Vista のローカル IIS 環境。もちろん拡張子 xls は MS Excel に関連付け)では、以下
のようなコードで IE7, Firefox, Opera, Safari で試しましたがいずれも Excel が立ち上がって xml
ファイルが表示されます。(注: HyperLink で NavigateUrl="Data/UserInfro.xls" となっています
が、中身は string path = @"C:\WebSites\MsdnTest\Data\UserInfro.xml"; と同じ xml ファイルで
拡張子を変更しただけです)<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
string path = @"C:\WebSites\MsdnTest\Data\UserInfro.xml";
if (System.IO.File.Exists(path))
{
using (System.IO.FileStream stream = System.IO.File.Open(path, System.IO.FileMode.Open))
{
int length = Convert.ToInt32(stream.Length);
byte[] data = new byte[length];
stream.Read(data, 0, length);
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("content-disposition", "attachment;filename=file.xls");
Response.BinaryWrite(data);
Response.End();
}
}}
</script><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HyperLink ID="HyperLink1" runat="server" Text="UserInfo"
NavigateUrl="Data/UserInfro.xls" Target="_blank"></asp:HyperLink>
<asp:Button ID="Button1" runat="server" Text="Download" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>