[PHP-users 27860] Re: Spreadsheet_Excel_Readerの表示形式について

TAKAGI Masahiro matakagi @ osk2.3web.ne.jp
2005年 12月 17日 (土) 06:49:24 JST


高木です。

At Fri, 16 Dec 2005 12:18:52 +0900,
KAWASAKI, Shingo wrote:
> 
> エクセルデータの読込みで、Spreadsheet_Excel_Readerを使用しているのですが、
> セルの書式設定の表示形式が『パーセンテージ』のデータの取得がうまくいきません。
> 
PEAR に Spreadsheet_Excel_Writer があるのは知っていたのですが、Reader
もあったのですね。知りませんでした。

 -> http://sourceforge.net/projects/phpexcelreader/

> 表示が「55%」(表示形式を『標準』に戻すと「0.55」)のデータを取得すると、「1%」となってしまいます。
> また、表示が「7%」(表示形式を『標準』に戻すと「0.07」)のデータだと、「0%」となってしまいます。
> 
> 恐らくデータ取得のタイミングで、整数型に四捨五入されているのでは無いかと考えておりますが、
> ソースを見てもそれをどこで行っているのかがわかりませんでした。
> 
> 
> ソースは以下の様な感じです。
> 
> // インスタンス化
> $data = new Spreadsheet_Excel_Reader();
> 
> // Set output Encoding.
> $data->setOutputEncoding('EUC_JP');
> $data->setUTFEncoder('mb');
> 
> // 指定したEXCELファイルを一括読み込み
> $data->read( $file_path );
> 
> // 取得
> $data->sheets[$worksheet]["cells"][$row][$col];
> 
この後で

 print_r($data);
 print_r($data->formatRecords);

を試してみるとわかるのですが、どうも「パーセンテージ」の書式情報がうま
く取り込まれていないようです。
# ソースをきちんと追えていないので、なぜなのかは不明です :-(

> 
> 参考までに、表示形式を『標準』に戻した上でデータの取り込みを行うと、正しく取得できます。
> (「0.55」のデータは正しく「0.55」と取得できている)
> 
> 表示形式が『パーセンテージ』の場合で、取得結果が55(%)でも0.55でも良いですので、
> 正しくデータを取得できる方法をご存知でしたらご教示願えませんでしょうか?
> 
表示形式が「パーセンテージ」であるセルの場所があらかじめ決まっているの
ならば、

> // 指定したEXCELファイルを一括読み込み
> $data->read( $file_path );

の前に
 $data->setColumnFormat(列番号, '%1.2f%%'); // "0.00%"
を指定しておけば、お望みの結果が得られると思います。

# Spreadsheet_Excel_Reader 付属の example.php のコメントを参考にしまし
# た。「パーセンテージ」以外の表示形式の設定方法は、Excel/reader.php
# の先頭にある $numberFormats の定義を見ればわかりそうですね。

ただし、この方法では
 ・事前に「パーセンテージ」であるセルの場所を知っておく必要がある
 ・セル単位ではなく、列単位でしかフォーマットを設定できない
という問題がありますのでご注意ください。

-- 
高木 正弘 mailto:matakagi @ osk2.3web.ne.jp


PHP-users メーリングリストの案内