私は PHPExcel クラスを使用しており、テンプレートのスプレッドシートを読み込んでから、データなどを変更しています。
スクリプトを動的に渡す内容に応じて、テンプレート内の特定の画像を削除し、特定のグラフ (チャート) を削除する必要があります。
と を使用してgetChartCollection()
すべてgetDrawingCollection()
を取得しましたが、読み込まれたテンプレートからグラフや画像を削除できるようにコレクションを変更する方法がわかりませんでした。
助けてくれてありがとう。ジェイソン K.
更新 - 以下の Mark Baker からの情報に感謝します。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.