PHPでSpreadsheet_Excel_Writerを使ってエクセル帳票(*.xls)を出力するプログラムを書いています。

Spreadsheet_Excel_Writer の Format::setScript で文字の上付き/下付きを指定できますが、セル単位でしか指定できないようです。
H<sub>2</sub>O(H2O)やm<sup>3</sup>(m3)みたいな上付き/下付き文字と標準スタイルの混在した化学式等の文字列をどうやってエクセルで出力させるか悩んでいます。
(化学式は出力内容のどこに出てくる解らないのでセル分割で対応することができません。)
<sub>タグを付けてもそのまま表示されてしまいます。XMLにするとタグを認識してくれるので化学式も正しく表示されるようですが…
なんとかして化学式をエクセルに出力できないものでしょうか?

皆様のお知恵をお貸しください。

※環境はUNIXサーバでPHP4+Spreadsheet_Excel_Writerです。
※VBAやエクセルマクロは使えない状況です。

回答の条件
  • 1人2回まで
  • 登録:2006/10/03 17:24:57
  • 終了:2006/10/10 17:25:04

回答(4件)

id:technolize No.1

technolize回答回数21ベストアンサー獲得回数32006/10/03 17:54:01

ポイント23pt

Spreadsheet_Excel_Writer を使わないので適切な回答ではありませんが、以下のようにすることで出力内容を自由に出来ます。

<?php

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="hoge.xls"');

print "<table border>
<tr><td>hoge<sup>123</sup></td></tr>
</table>";

?>

HTML として整形し、それを Excel に喰わせます。

スタイルシートを使えたかもしれませんが、確認していません。。

こういう方法もある、ということで。。

id:hokutonokobushi

言葉足らずでしたが今回はサーバーにファイルとして保存したいのです。

止むを得ない場合はご回答の方法も検討致します。

ありがとうございました。

2006/10/03 18:01:29
id:tori8 No.2

tori8回答回数26ベストアンサー獲得回数02006/10/03 22:49:52

ポイント22pt

Spreadsheet_Excel_Writerは使っていないのですが,サーバ上でH2Oなどの書式を盛り込んだHTMLファイルを生成し,そのHTMLファイルの拡張子をxlsに変えるだけで,一応,「サーバでのファイル保存」と「Excelでの上付き下付き書式」の実現が可能かと思います。ちょっと気持ちは悪いですね。

グラフ等のオブジェクトが必要であればこの方法では無理ですが・・・。

もし込み入った書式が必要であれば,Excelでその帳票フォーマットをhtmlで吐き出してテンプレートとし,テキストレベルで置換や挿入等の処理を行えば良いかと思います。

id:STRing No.3

STRing回答回数351ベストアンサー獲得回数362006/10/03 22:36:19

ポイント23pt

WebSVN - max_0.x - Rev 4323 - /vendor/PEAR/Spreadsheet_Excel_Writer/current/Writer/Format.php

sup == SUPerscript, sub == SUBscript と云う正式名称を念頭に検索したらソースが引っかかりました。

    /**
    * Sets the script type of the text
    *
    * @access public
    * @param integer $script The value for script type. Possible values are:
    *                        1 => superscript, 2 => subscript.
    */
    function setScript($script)
    {
        $this->_font_script = $script;
    }

この辺り。

と云うことで、以下のようにでどうでしょう? 実践していません。

$sheet = new Spreadsheet_Excel_Writer();
$style1 = & $sheet->addFormat();
$style1->setScript(1);

id:takagimasahiro No.4

m-takagi回答回数23ベストアンサー獲得回数22006/10/05 19:19:11

ポイント22pt

現状の Spreadsheet_Excel_Writer ではセル単位での書式指定にしか対応しておらず、文字単位で書式を指定することはできません (上付き・下付きに限らず、フォントや色の指定についても同じです)。どうしても Spreadsheet_Excel_Writer にこだわるのなら、

http://www.pleasuresky.co.jp/insidexl.php3

あたりを参考にして Worksheet::writeString()Worksheet::writeStringBIFF8() を改造してしまう以外に手はなさそうです。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません