Здравствуйте. Знаю, что много раз обсуждалось, но тем не менее, если у вас есть ответ на мой вопрос, чиркните хотя бы пару слов )) Интересует импорт/экспорт (парсинг/генерация) excel файлов. Нашел несколько компонентов: Zakkis.PHP.Excel.Parser.Pro.v4.5 - отличный парсинг. понимает все экселевские форматы до 2007 офиса. Одна беда - для генерирования эксел-файла не годится. PHPExcel - мощный компонент. Только, насколько я понял, он как раз таки понимает только формат 2007 офиса. К тому же, говорят, памяти дофига жрёт, поскольку создаёт кучу объектов для каждого элемента. Spreadsheet_Excel_Writer - лёгкий компонент, но понимает только Excel 5.0 Кто, что скажет? Можно, конечно, и все эти компоненты использовать, но может есть что-то пофункциональнее вашеперечисленного?
Он умеет Excel 2003, Excel-2007, CSV, acrobat, html, xml и из одного в другой туда и обратно благодаря своей архитектуре, может еще что-то добавили. он постоянно расширяется. хорошая оо-архитектура. легко расширяется. я добавил свой ПДО- ридер и апгрейдил райтер для эксель 2007 на раз. Парсить умеет быстро если включать режим чтения реадДатаОнли, лучше всего работает с 2007 экселем во всем. В 2003 почти недоступно графическое оформление. Но парсит все так же лихо. Дока очень хороша. Во время генерации памяти жрет много. это да. сам проверял. зато время экономит. а время дороже. кстати в "программирование на пхп" не помешало бы открыть постоянную тему "PHP Excel". или это тоже лишнее?
Вопросик в догонку по PHPExcel... Он умеет парсить файл из реквеста и писать в респонс? Так... как в респонс писать - оказалось дело нехитрое... Теперь, как читать...
Про ленгх не знаю. Если собираешься отправлять пользователю файло, можешь вместо Excel2007Writer использовать мой райтер. Он по send() отправляет пользователю файл так, что бы он открывался в окне экселя, а не в окне браузера. PHP: <?php require_once 'PHPExcel/Writer/Excel2007.php'; class PHPExcel_Writer_Excel2007Ex extends PHPExcel_Writer_Excel2007{ /** * * @param string $fileName имя файла с расширением */ public function send($pFilename = 'безымянный.xlsx'){ header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename={$pFilename}"); header("Content-Transfer-Encoding: binary "); $this->save('php://output'); } }
alexey_baranov спасибо. этот трик я знаю, просто пока лень было искать в загашниках)) мда, походу ленгх не определить никак, кроме как сохранять на диск, потом вычитывать размер, чего совсем не хотелось бы. ну или ползти в код ПХПекселя, что тодже не айс)
если очень надо, спроси на форуме проекта в пендостане. должно быть какое-то традиционное решение. мне на ум приходить только предварительное сохранение или поиграться с буфером как то так PHP: <?php ob_start(); $writer->save('php//output'); $Content-Length= ob_size(); //пошли заголовки, включая Content-Length ob_end_flush();
ок, тханкс) еще такой момент... Charset... Блин, такой аццкий компонент, столько кода, а таких нужных вещей, как парсинг из пост-параметра, размер файла и кодировка отсутствуют. У меня на виртуалхосте указана кодировка UTF-8. Не знаю, правда, с этим ли связано, что этот компонент выдает CSV файлы в УТФе... Как это победить?
когда я впервые взял ПХПЭксель, тоже маялся с кодировкой. На пендосском форуме даже где-то есть мои темы "сделайте свойство $encoding". Но пендосы были неумолимы. Пришлось все гонять четер иконв() туда-сюда. Потом c точно такой же проблемой я столкнулся в AD. Потом в веб-сервисах. Если писать сразу в utf-8, можно сэкономить много времени и сил. Так что UTF не надо побеждать. на него надо переходить. а это что такое?
неудачно выразился)) я имел в виду, открывать он умеет только физический файл на диске, а хотелось бы иметь возможность давать ему на парсинг файл, который зааплоадили по хттп, то есть из реквеста. ну хоть писать в респонс можно, и то гут. или я не прав? понятное дело, CSV легко и штатными средствами пхп сгенерить можно в любой кодировке всего лишь за два цикла, но раз уж пришлось использовать четырехметровый компонент, то хотелось бы это делать по максимуму)).