2

私は PHPExcel クラスを使用しており、テンプレートのスプレッドシートを読み込んでから、データなどを変更しています。

スクリプトを動的に渡す内容に応じて、テンプレート内の特定の画像を削除し、特定のグラフ (チャート) を削除する必要があります。

と を使用してgetChartCollection()すべてgetDrawingCollection()を取得しましたが、読み込まれたテンプレートからグラフや画像を削除できるようにコレクションを変更する方法がわかりませんでした。

助けてくれてありがとう。ジェイソン K.

更新 - 以下の Mark Ba​​ker からの情報に感謝します。1.7.9 がリリースされるまでにワークシート クラスに追加する必要がある次のコードを作成しました。私のコードは以下です。

/**
 * Remove drawing from collection
 *
 * @return PHPExcel_Worksheet_BaseDrawing[]
 */
public function removeImageByIDs($IDs)
{
    if(!is_array($IDs)) $IDs = array($IDs);
    $drawing_collection = $this->_drawingCollection;
    $drawing_collection_copy = $drawing_collection->getArrayCopy();
    foreach($IDs as $ID){
        unset($drawing_collection_copy[$ID]);
    }
    $drawing_collection_copy = array_values($drawing_collection_copy);
    $drawing_collection->exchangeArray($drawing_collection_copy);
    $this->_drawingCollection = $drawing_collection;
    unset($drawing_collection_copy);
    unset($drawing_collection);
    return $this->_drawingCollection;       
}

 /**
 * Remove chart from collection
 *
 * @return PHPExcel_Worksheet_BaseDrawing[]
 */
public function removeChartByIDs($IDs)
{
    if(!is_array($IDs)) $IDs = array($IDs);
    $chart_collection = $this->_chartCollection;
    $chart_collection_copy = $chart_collection->getArrayCopy();
    foreach($IDs as $ID){
        unset($chart_collection_copy[$ID]);
    }
    $chart_collection_copy = array_values($chart_collection_copy);
    $chart_collection->exchangeArray($chart_collection_copy);
    $this->_chartCollection = $chart_collection;
    unset($chart_collection_copy);
    unset($chart_collection);
    return $this->_chartCollection;
}

楽しみ。ジェイソン K.

4

1 に答える 1

3

信じられないかもしれませんが、スプレッドシートからグラフや画像を削除することについて誰かが尋ねたのはこれが初めてです。PHPExcel には実際にはこのためのメソッドはありませんが、自分で簡単に追加できます。これらのコレクションにエントリを追加するメソッドは、PHPExcel_Worksheet クラスにあります。コレクションは単なる配列であるため、unset()、array_splice() などを使用して不要なエントリを削除するだけです。

于 2013-02-12T20:25:15.530 に答える