Pull to refresh

Comments 40

Такой способ используют старые версии phpMyAdmin. Функционал такого решения крайне ограничен, но решение практично к примеру при очень больших объемах информации. Но именно для сохранения больших объемов я недавно этот класс добавлял в новую версию phpMyAdmin на сервере клиента. Но многие клиенты не распознают его как документ Excel и ругаются на это, хоть и отображают корректно.

Использую в работе библиотеку PHPExcel. Достаточно гибкая и удобная. Ее единственная проблема — переполнение памяти при создании документа большого объема, даже когда выбираешь кэш на диске. Пока этот баг, к сожалению, не пофиксили.
У меня данные очень простые, поэтому выгоднее накидать примитивное решение, чем ставить библиотеку. Тем более, что с расширениями для PHP возникли какие-то проблемы, когда я эту библиотеку пытался поставить (чего-то не хватило, не помню чего именно), а разбираться с хостером было очень лениво.
UFO just landed and posted this here
к сожалению библиотека еще и течет если писать в цикле в разные XLS файлы. Решал через костыль в виде запуска внешнего РНР скрипта для генерации одного файла.

Тем не менее библиотека очень хороша
Spreadsheet_Excel_Writer хорош, но скудность документации и наличие пролем с кирилицей, даже при принудительном указании $worksheet0->setInputEncoding('UTF-8');. Плюс — вышеозначенный set неработает одновременно с setVersion.
Кириллица и умлауты вроде отображаются при setVersion(8), но правда не в названии листа. Ошибок памяти у этой библиотеки не возникает, а документации достаточно для создания стандартных документов. К сожалению пришлось от нее отказаться, т.к. версия 8 не открывается на некоторых устройствах, к примеру iPhone/iPad (а у главного заказчика это рабочий инструмент), а в других версиях не отображается UTF, как вы правильно написали.
Ненадо путать теплое с мягким — дока есть, но ее мало. Я помню долго сидел и развлекался с setVersion/setInputEncoding, в итоге остановился на последнем. Даже им в багрепорт отписывал, правда безответно.
да, с кодировками у них лажа полная, согласен. Доки я брал тут: pear.php.net/package/Spreadsheet_Excel_Writer/docs
вроде, основной функционал там расписан, но по сравнению с тем же PHPExcel функций не так много. Но как я писал, от нее пришлось отказаться
а многостраничные документы? а формулы как формулы, а не как текст?
А как ты формулы в HTML выведешь?
эээ, а как часто в ГЕНЕРИРУЕМОМ xls-файле нужны формулы?
Ну значит достаточно и csv в итоге, не?
Смотрел, на хостинге заказчика ему не хватало компонент, а экселевский файл надо было слишком простой генерировать, чтобы ради этого заморачиваться.
Зачем велосипед?
Использую class Excel_XML
Генериует валидный Excel 2003 XML файл (открывается Excel 2003+). Пусть и больше размером, зато стандартный.
На него не натыкался, поизучаю.
Ожидал увидеть этот комментарий. В данном конкретном примере поддерживаю.
Формат для экселя родной и главное строгий, парсит он его на много быстрее, особенно заметно на больших выгрузках.
Но не очень удобно, когда требуются опциональные колонки.
А <head><meta http-equiv="content-type" content="text/html; charset=windows-1251"></head> от кодировки не помогает?
Честно говоря не помню, я это полгода назад уже писал. Вроде пробовал и не помогло.
Тупо скопировал пример, в котором объяснялось как php генерировать скачиваемый файл, а дальше как обычно, подобный мусор из кода убирается либо когда уже ни хрена не понятно, либо если он вредит работе :)
Я лентяй, да.
А чем потом такие файлы разбирать на php? =)
Да таким, что-бы и нормальные файлы xls(xlsx) тоже разбирались?..
Разбирать у меня задачи не было)
Вроде такой файл, если его открыть в экселе, а потом сохранить, превращается в честный xml, но надо проверить
К сожалению на php пересохранить файл экселем крайне сложно.
Вообще, если набор тэгов, которые будут в таблице, нам известен, то разобрать ее проблем не вижу. Или даже просто разбирать табличные тэги, а все что внутри гнать чистым текстом, без парсинга.
Вы по сути заставляете Excel открыть html-страницу, переименовую в xls, а не создаете файл формата Excel. Цель топика «сгенерировать xls посредством php» не достигнута, зато изобретен очередной костыль.
Открыв этот файл в экселе мы можем с ним полноценно работать в плане форматирования, формул и т.д., в чем проблема? Да, с точки зрения внутреннего формата это будет не полноценный xls (до первого сохранения), но тут уже вечный вопрос про шашечки или ехать. Если оно выглядит как xls и работает как xls, то вот не пофиг что там внутри?
файл, открывающийся excel-ем — не есть xls документ. Просто умный интерпретатор экселя разгадывает предоставленный ему ребус.
Переименуем csv файл в xls — не откроется с ходу, потребует импорт. Я не спорю, у меня задачи простые, но на небольших объемах простых данных во всех внешних проявлениях файл идентичен xls.
Заказчик тоже человек простой, ему нужен файл, который открывается как xls, обрабатывается как xls и сохраняется как xls, а внутреннее устройство ему пофигу :)
Зачем переименовывать csv в xls? O_o
csv откроется в экселе безо всяких вопросов — молча и правильно.
Если данные простые, как уже было указано, то зачем пытаться преобразовать их в формат, который предусматривает более сложное представление? тем более что тут даже не преобразование в формат, а просто подсовывание данных под его видом.
Используйте CSV — это отличный способ передать данные в эксель. А дальше, как вы сами говорили, клиент будет делать с ними что угодно в нем.
В csv как минимум шрифты нельзя сделать жирный\курсив и т.д., с объединенными колонками тоже не представляю как сделать
Переименованный csv я просто привел в пример, что умный интерпретатор экселя не все представляющее таблицу без вопросов распознает
Его я так и не смог заставить работать с UTF-8 корректно.
xlsWriteLabel(1,0,iconv(...)); пробовали?
Дабы не захламлять код, можно сделать что-то вроде:

function i($arg) {
return iconv("utf-8","windows-1251", $arg);
}


И использовать

xlsWriteLabel(1,0,i("Text"))

Либо же просто подправить функцию xlsWriteLabel.
У нас используется
header("Content-Type: application/vnd.ms-excel");

И да, это не генерация xls, а способ открыть таблички из отчетов в экселе, чего во многих случаях достаточно:)
Почему то все, все без исключения, когда пытаются продружить «что то и Excel», пытаются использовать всё, всё что угодно — CSV, «HTML под видом XLS», даже библиотеки, которые генерируют «чистый XLS». Но все забывают про простой, удобный, не сильно сложнее чем CSV формат SYLK ( http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) ). Это как RTF только для Excel.
Чтобы про что-то забыть, надо про что-то знать, спасибо за информацию.
Самый простой способ избежать проблем с кодировкой xls в Excel:
— создать новый документ в Excel содержащий символы кириллицы
— сохранить его как .html
— открыть *.html — там будет самый верный мануал

Не верите? Переименуйте в .xls и откройте в Excel.
А как же быть с большими прайсами с разворачивающейся/сворачивающейся структурой?
Sign up to leave a comment.

Articles