Как удалить / удалить графики (диаграммы), картинки (изображения) из файла 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() или аналогичного для удаления ненужных записей.

Другие вопросы по тегам