10

テンプレートをロードし、データを挿入して新しいファイルとして保存するための簡単なセットアップを作成しようとしています。ただし、一部のセルで条件付き書式が必要であり、新しく作成されたファイルを取得すると、条件付き書式がありません。他の書式設定によって上書きされていません。条件付き書式設定メニューにルールがありません。PHP 5.2、PHPExcel 1.7.8、および Excel 2010 を使用しています。

<?php
class template {
    static $objPHPExcel;
    function __construct() {
        define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
        require_once '../Classes/PHPExcel/IOFactory.php';
        if (!file_exists("template.xlsx")) {
            exit("template missing." . EOL);
        }
        echo date('H:i:s') , " Load from Excel2007 file" , EOL;
        $objReader = PHPExcel_IOFactory::createReader('Excel2007');
        $objReader->setReadDataOnly(false);
        self::$objPHPExcel = $objReader->load("template.xlsx");
    }
    function insertdata($dataArray){ /* unused */ }
    function save($name){
        define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
        require_once '../Classes/PHPExcel/IOFactory.php';
        echo date('H:i:s') , " Write to Excel2007 format" , EOL;
        $objWriter = PHPExcel_IOFactory::createWriter(self::$objPHPExcel, 'Excel2007');
        $objWriter->save($name);
        echo date('H:i:s') , " File written to: ".$name , EOL;
    }
$temp=new template();
$temp->save("savethis.xlsx");

グレード 2 のカラー スケールを保持しようとしています (セル値に基づく書式設定、最小値は Number=1 型、最大値は Number=10 型です)。問題のセルには、別のシートを参照する数式が添付されています (すべてのデータは正しく保存されています)。

4

2 に答える 2

1

元のファイルから「自動フィルター」、「データ検証」、および「条件付きフォーマット」を取得するXLS/XLSXファイルを読み取り、変更、保存することは絶望的であることがわかりました。私が見つけた最終的な解決策は、 PHPExcel ライブラリ。

悲しいことに、他の回答に記載されているように ( https://stackoverflow.com/a/13172890/218418 ):

PHPExcel は、ワークブック ファイルを「編集」するためのライブラリではありません。PHPExcel を使用してファイルを変更するのではなく、ファイルからロードでき、その後ファイルに書き込むことができる PHPExcel オブジェクトを変更しています。

データの検証、条件付き書式設定、自動フィルターのみを備えたテンプレートを使用して Excel ファイルを「編集」するようなことは不可能ですが、理解できます。

于 2014-12-08T08:10:14.237 に答える