Как удалить / удалить графики (диаграммы), картинки (изображения) из файла Excel, загруженного в PHPExcel?
Я использую класс PHPExcel и загружаю таблицы шаблонов, а затем изменяю данные и так далее.
В зависимости от того, что я передаю свой сценарий динамически, определенные изображения в шаблоне должны быть удалены, а определенные графики (диаграммы) должны быть удалены.
Я использовал getChartCollection()
и getDrawingCollection()
чтобы получить все, но я не нашел способ изменить коллекции, чтобы я мог удалить диаграммы и / или изображения из загруженного шаблона.
Спасибо за любую помощь. Джейсон К.
ОБНОВЛЕНИЕ - Благодаря информации от Марка Бейкера ниже. Я написал следующий код, который необходимо добавить в класс листа до выпуска 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;
}
Наслаждаться. Джейсон К.
1 ответ
Верьте или нет, это первый раз, когда кто-либо когда-либо спрашивал об удалении диаграмм или изображений из электронной таблицы. PHPExcel на самом деле не имеет каких-либо методов для этого, но их было бы достаточно легко добавить самостоятельно. Методы для добавления записей в эти коллекции находятся в классе PHPExcel_Worksheet; и поскольку коллекция представляет собой просто массив, то это просто случай использования unset(), array_splice() или аналогичного для удаления ненужных записей.