人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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やエクセルマクロは使えない状況です。

●質問者: hokutonokobushi
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:H2O M3 PHP UNIX VBA
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● technolize
●23ポイント

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 に喰わせます。

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

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

◎質問者からの返答

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

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

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


2 ● tori8
●22ポイント

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

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

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


3 ● STRing
●23ポイント

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);


4 ● m-takagi
●22ポイント

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ