- PR -

エクセルのシート名

投稿者投稿内容
yukiesann
会議室デビュー日: 2002/12/05
投稿数: 8
投稿日時: 2002-12-05 19:45
IEにダウンロードして表示したエクセルファイルのシート名に、
任意の文字列を設定する方法を、どなたかご存知ないでしょうか?

現在、サーバー側でクライアントのブラウザに表示する文字列をHTMLで作成し、
ダウンロード先のブラウザにエクセル形式で表示しています。
ContentTypeに"application/vnd.ms-excel"、
setHeaderで"Content-Disposition","inline; filename=\"title\"" としています。
表示されたエクセルシート名には、サーブレット名が設定されます。

いろいろ調べたのですが、ファイルダウンロード時のファイル名についてはあっても、
シート名についての記述が見当たりません。
環境がよくないのでしょうか?
シート名の指定は不可能なのでしょうか?
どなたか、設定できている方がいらっしゃったら、
環境も併せてご教授ください。。。

私の環境は、
Windows2000ProfessionalSP1
Tomcat3.3.1
IIS5.0
IE6SP1
Excel97SR-1です。

ダウンロード内容は、以下のようなhtmlです。
<HTML>
<HEAD></HEAD>
<BODY>
<TABLE>
<TR><TD>No</TD><TD>head1</TD><TD>head2</TD></TR>
<TR><TD>1</TD>赤<TD>大きい</TD><TD>犬</TD></TR>
<TR><TD>2</TD>青<TD>小さい</TD><TD>猫</TD></TR>
</TABLE>
</BODY>
</HTML>
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2002-12-06 12:56
ダウンロードさせるまでの規格はちゃんとあると思うんですが、ダウンロードさせる物の
中身についてはファイルフォーマット毎に違うので、サーバー側でデータを生成する際に
設定してあげるしかないと思います。ActiveScriptとかで、ダウンしたファイルに手を
加えたりすればできるかも。あとは雛型のようなファイルを作っておいて、サーバ−側で
必要な書き換えを行ったものをクライアントに返すとかですかねー。
yukiesann
会議室デビュー日: 2002/12/05
投稿数: 8
投稿日時: 2002-12-06 14:04
ご回答、ありがとうございます。

私も

> サーバー側でデータを生成する際に設定してあげるしかない

と思い、以下のようなことを試してみました。

・HEADタグの間に“<TITLE>name</TITLE>”を入れる。→変化無し
・エクセルファイルを「HTML形式で保存」で保存し、シート名の文字列を探す。→無し
・setHeaderの"Content-Disposition","inline; filename=\"title\""を
 "Content-Disposition","inline; sheetname=\"title\""とする・・・

今回、ダウンロードしたいデータは、「htmlで書かれたテキスト」です。
それを、ContentTypeの指定で「エクセル形式で表示」します。
ヘッダーの設定、又はhtmlの書き方などで、
ダウンロード後のシート名の指定はできないものでしょうか?

質問する際、言葉足らずな部分があったことをお詫びいたします。
今後とも、よろしくお願いいたします。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2002-12-06 14:50
引用:

表示されたエクセルシート名には、サーブレット名が設定されます。



なら、サーブレット名(マッピング)を変えるのではだめですか?
yukiesann
会議室デビュー日: 2002/12/05
投稿数: 8
投稿日時: 2002-12-06 15:44
ご回答、ありがとうございます。

やはり、「シート名にはサーブレット名が設定される」という制約からは
逃れることは出来ないのでしょうか。。。

確かに、マッピングによって、シート名も変わりました。
マッピングの仕方によって、複数のサーブレット名で
1つのサーブレットを起動することも出来ますね。
ですが、できれば、設定ファイルの変更でなく、プログラムコードの変更で、
シート名の指定をしたいです。
シート名も、できれば、日本語で指定したいです。

引き続き、情報、お待ちしております。
よろしくお願いいたします。

[ メッセージ編集済み 編集者: yukiesann 編集日時 2002-12-07 21:50 ]
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-12-08 13:37
マップで処理したくなければ、いろいろなヘッダを指定して試してみるしかないのでは。
少なくとも Excel がどこからどうシート名を取っているかの仕様がわからないと…。
# そういう方法が公開されてるかはわかりませんが、MSDN あたりでも探すとか。
# 個人的には、非公開情報だったら使うべきではないと思います。

日本語シート名もどうですかね。URL には 2 バイト文字は入れられませんから、試しに「もげもげ/%30%42.html」(UCS2)とか「もげもげ/%E3%81%82.html」(UTF8)とか「もげもげ/%82%A0.html」(SJIS)なんていう HTML をつっこんでみてください。シート名が「あ.html」になればこの方法が使えそうですが、だめならあきらめましょう。
Kare
会議室デビュー日: 2002/10/01
投稿数: 7
投稿日時: 2002-12-08 22:24
全く違うやり方ですが,POI(http://jakarta.apache.org/poi/index.html) を使ってみてはどうでしょうか?

POI を使えば,Excel ファイルの操作ができます.
シート名に関する API があるかは知らないのですが,無くてもシート名だけを設定した
空の Excel ファイルを用意しておき,それに POI を使ってデータを追加する事は可能です.
yukiesann
会議室デビュー日: 2002/12/05
投稿数: 8
投稿日時: 2002-12-11 10:10
ご回答、ありがとうございます。

MSDNをあたってみましたが、探し方が悪いのか、非公開なのか、
どこの情報がシート名になっているかについては探し当てることができませんでした。

POIは、私のしたいことを、実現してくれるものでした。
ただ、データをhtmlで生成するクラスがほぼ出来上がっているのと、
時間がないことを考慮して、今回はマッピングによってサーブレット名を指定し、
エクセルシート名にすることにしました。

ちなみに、マッピング方法は<url-pattern>に“/@@@@/*”(@@@@:任意の文字列)と
設定するのですが、サーブレット呼び出し時、
* 部分に日本語を指定しても問題なく、シート名には * 部分に設定した日本語文字列が
設定されました。
ただ、getでパラメータを送ると、シート名にはパラメータを含めた文字列が
設定されるので、postで送ることにしました。

皆さんの投稿、大変参考になりました。ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)