式の追加方法

Share on Facebook
はてなブックマーク - 式の追加方法
このエントリーをはてなブックマークに追加

文責:sake

Excel_Reviser Ver0.33より式入力にも対応するため、テスト用に配布を開始しました。フォーラムの事前配布用の板からダウンロードして御確認ください。Spreadsheet_Excel_Writerとは異なり、日本語かつBIFF8に対応しています

以下は、記載途中の文章です。現時点の状況を説明しているわけでは有りません。無視してください

Excel_Reviserでは、公式にはユーザが自由に式(関数)を追加する方法を公開していません。今後も公式に対応する予定も有りません。
しかし、一部(Spreadsheet_Excel_Writerと同等)の式をセルに挿入することができます。
以下にその方法を説明します。

【前提】

  1. 本件については、一切の質問もサポート依頼も受け付けません。それなりの知識のある方のみお試しください
  2. 一部のユーザ環境では動作しません。PEARのエラー管理方法に関して無知な方はあきらめてください
  3. Spreadsheet_Excel_Writer で式を追加する際の表記方法を知らない方は御自分で調べてください。それでも不明な場合は、諦めてください。
  4. Excel_Reviser Ver0.31beta が必要です。(Ver0.30でも式の表記にエラーが発生しなければ動作はします)これ以降のバージョンで対応するか否かは未定です。(気が向いたら対応しますが、今のところ予定は有りません)

【準備】

以下のファイルを入手してください。

  • Excel_Reviser_031b.tgz  茶漬けフォーラムのXXXXXXXXから入手
  • Parser.php  Spreadsheet_Excel_Writer0.91内より抜き取る。または このリポジトリ をダウンロードする。既にSpreadsheet_Excel_Writerがインストールされている場合は不要です。
  • Reviser_plus_formula.tgz  別途配布のサンプルです(必須ではありません)

【インストール】

サーバーの環境によって異なります

環境1.PEARとSpreadsheet_Excel_Writerがインストールされている場合。
    何も追加インストールは不要です

環境2.PEARはインストールされているがSpreadsheet_Excel_Writerが無い場合
    Parser.phpだけをインクルード可能な場所に配置するだけ

環境3.PEARもSpreadsheet_Excel_Writerもインストールされていない場合
    Parser.phpと以下のスクリプトをインクルード可能な場所に配置します
    PEAR.phpはParser.php内から呼ばれるため無いとエラーになります。
<?php
/**
* Dummy PEAR-class
* Remove this file if you have already installed PEAR.
*/
class PEAR {
function isError($data, $c = null){return is_a($data, 'ErrMess');}
function &raiseError($message = ''){return new ErrMess($message);}
}
?>

 

【実行】

まずは、実行ファイル例 
< ?php require_once('../reviser.php'); // パスは環境に応じて変更のこと
require_once('../Parser.php');
説明は記載途中、ゆっくり準備中

// reviserのインスタンスを作成します。
$reviser=NEW Excel_Reviser;

// 式挿入例 まず式のバイナリーを作成します
$formula = ‘=SUM(A1:A3)’;// この式を追加します
$formula = preg_replace(”/(^[=@])/”,”", $formula);  // ‘=’は余分なので削除

$mkform = & new Spreadsheet_Excel_Writer_Parser(0, Code_BIFF8);
$error = $mkform->parse($formula);
if ($mkform->isError($error)) die($error->getMessage());
$formula = $mkform->toReversePolish();

$reviser->addFormulaRecord(0, 3, 0, $formula);

// 最後に書換えを実行します
$reviser->reviseFile(’infile.xls’,'outfile.xls’);
?>

(コメント オフ)