PHPExcel - Форматирование теряется при редактировании из кода - PullRequest
4 голосов
/ 07 декабря 2009

Сейчас я играю с интеграцией PHP - MS Excel. Моя задача открыть существующую электронную таблицу, добавить некоторые данные и сохранить заполненную электронная таблица как новый файл. В основном своего рода механизм заполнения шаблонов, eventhough xlsx файлы используются в качестве шаблонов.

Я посмотрел на PHPExcel , который кажется довольно хорошим фреймворком. С целью Для реализации доказательства концепции я сделал следующее (сведено к минимуму требуется проиллюстрировать, что мне нужно сделать):

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);  
$objPHPExcel = $objReader->load("myTemplateToFill.xlsx");

    //Here comes the actual filling
$objWorksheet = $objPHPExcel->createSheet();
$objWorksheet->setTitle('Apple')    ;
$objWorksheet->setCellValue('A1', 'Banana');    
$objPHPExcel->setActiveSheetIndex(0);

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('myFilledTemplate.xlsx');

Запустив это, я обнаружил, что создан новый файл, мой даат вставлен, но, к сожалению, все существующее форматирование потеряно.

Таким образом, вопрос в том, есть ли способ заставить PHPExcel сохранять эти теги форматирования в новом файл? Или пойти еще дальше: можно ли сохранить графики и т. Д. В файле шаблона и заполнить их так, как я пытался?

Заранее благодарим за весь ваш опыт!

K

Ответы [ 2 ]

7 голосов
/ 26 апреля 2010

Форматирование потеряно из-за этой строки $ ObjReader-> setReadDataOnly (истина); который говорит читателю читать только данные из вашей книги-шаблона, а не форматирование.

Вам также необходимо изменить данные в существующих таблицах. Создание нового листа создаст неформатированный лист. Кроме того, вы можете использовать метод PHPExcel_WorkSheet copy ()

3 голосов
/ 07 декабря 2009

Хм, вы создаете новый рабочий лист, формат которого по умолчанию отсутствует. Я думаю, что вы должны добавить свои значения в существующий лист?

$objPHPExcel->setActiveSheetIndex(0); // index of sheet
$workSheet = $objPHPExcel->getActiveSheet();
$workSheet->setTitle('Pflaume');
...