Я попытался использовать phpexcel с моим собственным файлом шаблона. phpexcel загружает файл и записывает данные в некоторые ячейки A2, A3, A4, например .. и открывает выходной файл с новыми данными.
у моего файла шаблона есть встроенная диаграмма. Все, что я хочу сделать phpexcel, – это заполнить значения в ячейках и не трогать диаграмму. И откройте новый файл. (Обратите внимание, что я не хочу, чтобы диаграмма была в коде. Я хочу, чтобы диаграмма существовала в моем шаблоне в том же формате, который я создал изначально). Только данные должны обновляться.
Но, когда я пытаюсь это сделать, сама диаграмма отсутствует в полученном файле. После попытки по-разному … все еще не удалось.
И я нашел следующий код из http://phpexcel.codeplex.com/discussions/397263
require_once 'Classes/PHPExcel.php'; /** PHPExcel_IOFactory */ include 'Classes/PHPExcel/IOFactory.php'; $target ='Results/'; $fileType = 'Excel2007'; $InputFileName = $target.'Result.xlsx'; $OutputFileName = $target . '_Result.xlsx'; //Read the file (including chart template) $objReader = PHPExcel_IOFactory::createReader($fileType); $objReader->setIncludeCharts(TRUE); $objPHPExcel = $objReader->load($InputFileName); //Change the file $objPHPExcel->setActiveSheetIndex(0) // Add data ->setCellValue('C3','10' ) ->setCellValue('C4','20' ) ->setCellValue('C5','30') ->setCellValue('C5','40' ); //Write the file (including chart) PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $fileType); $objWriter->setIncludeCharts(TRUE); $objWriter->save($OutputFileName);
Вышеприведенный код работает в excel 2010 и теперь держит мою диаграмму в такт … но все же, когда я пытаюсь использовать filetype «Excel5», это не сработает.
Это вызывает следующую ошибку:
Fatal error: Call to undefined method PHPExcel_Reader_Excel5::setIncludeCharts() in D:\IT\bfstools\PHPExcel\MyExamples\test1.php on line 16
Пожалуйста, предоставьте простое решение, в котором я хочу, чтобы файл шаблона работал с .xls и .xlsx, и вся моя оригинальная диаграмма в файле шаблона оставалась неповрежденной . Я не хочу, чтобы диаграмма удаляла его из результирующего файла. Я также не планирую создавать диаграмму с использованием кода phpexcel. (зачем писать ненужный код, когда excel может выполнить всю работу за вас).
Мне нужен самый простой выход, который просто использует все в моем шаблоне и просто заполняет ячейки новыми данными. И моя существующая диаграмма в шаблоне появляется автоматически. Я не хочу писать ненужный код, пока я могу смело полагаться на функции Excel и графические функции.
Пожалуйста помоги.
Для этого есть веская причина:
Графики реализованы только в ядре, а для читателей и писателей Excel2007 – в этот момент, поэтому все остальные читатели или писатели будут игнорировать графики, рассматривая их так, как будто их просто не существует. Намерение состоит в том, чтобы развернуть диаграммы другим читателям / писателям в течение следующего года.
РЕДАКТИРОВАТЬ
Я вижу из вашего комментария, что вы не понимаете, как работает PHPExcel, поэтому я много объясняю.
PHPExcel не является библиотекой для «редактирования» файлов книг: вы не используете PHPExcel для изменения файла, вы меняете объект PHPExcel, который может быть загружен из файла, и впоследствии его можно записать в файл.
PHPExcel Core представляет собой представление в виде таблицы в виде таблицы с различными составляющими объектами, такими как рабочие листы, ячейки, изображения, стили и т. Д., Все они представлены как объекты PHP.
Читатели PHPExcel анализируют файл электронной таблицы и загружают все компоненты из файла, который они запрограммировали для распознавания, и создают соответствующие основные объекты PHPExcel из этих файловых компонентов. Если нет эквивалентного объекта PHPExcel Core (например, сводных таблиц), то этот компонент не может быть «загружен»; если загрузчик не был запрограммирован на распознавание файлового компонента, его нельзя загрузить. В этих случаях эти элементы из файла просто игнорируются. Как только Reader выполнил свою работу, существует объект PHPExcel, и файл электронной таблицы закрыт и забыт.
Когда объект PHPExcel Core существует в памяти, у вас есть набор методов, позволяющих вам манипулировать и изменять его, добавлять, изменять или удалять элементы ядра; но они работают исключительно с коллекцией «в памяти» объектов, элементов ячейки, стиля, которые содержат PHPExcel Core. Ядро существует без знания того, что он был загружен из файла или был создан с использованием PHP «нового PHPExcel ()»; он никак не изменяет файлы.
При записи обратное верно. Каждый Writer принимает основные объекты PHPExcel и записывает их в файл в соответствующем формате (Excel BIFF, OfficeOpenXML, HTML и т. Д.). Подобно читателям, каждый писатель может писать только те объекты PHPExcel Core, которые были запрограммированы для записи. Если он не был запрограммирован на запись (например, диаграммы), то любые диаграммы, определенные в ядре PHPExcel, будут игнорироваться, потому что этот писатель просто не знает, как их записать. Аналогично, функции, которые существуют в PHPExcel Core, которые не поддерживаются форматом файла, который записывается (например, стили ячеек для CSV Writer), игнорируются.
Поэтому для поддержки функции электронной таблицы, такой как диаграммы, необходимо, чтобы коллекция объектов PHPExcel Core была изменена, чтобы обеспечить представление «в памяти» этих элементов, а для разных читателей было запрограммировано распознавание этих элементов в файл, который они загружают, и преобразовать их в соответствующие объекты PHPExcel Core, а также для разных писателей, которые были запрограммированы для преобразования представления ядра PHPExcel в соответствующее представление файла.
Каждый Reader и каждый Writer необходимо программировать индивидуально. Графики – относительно новая функция, добавленная только в PHPExcel Core в версии 1.7.7, и на данный момент запрограммированы только для чтения и записи для формата Excel2007 для распознавания элементов диаграммы. Хотя разработчики должны расширять это, чтобы охватить и другие форматы, необходимый код не создается автоматически. Программирование каждого отдельного Reader и Writer требует времени и усилий. В то время как код диаграммы для Excel2007 Reader и Writer теперь стабилизировался до такой степени, что теперь он больше не считается «экспериментальным», а фокус развития обращается к написанию необходимого кода для обработки диаграмм в Excel5 Reader и Writer, это работа который еще не завершен.
Если вы можете использовать Golang, попробуйте Excelize . Поддержка сохранения файла без потери оригинальных графиков XLSX.
Попробуйте установить setIncludeCharts
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); // Tell the reader to include charts when it loads a file $objReader->setIncludeCharts(TRUE); // Load the file $objPHPExcel = $objReader->load($filePath);