Comments 37
p.s. а у Oracle ещё number(38 цифр) — один из наиболее распоспостранённых типов, да и номер счёта (20 цифр) excel очень любит сохранить как число (с округлением ;)).
"Пучеглазят"
Но по факту обычно фильтры/формулы/суммы/сводные таблицы/сравнения с другими данными/системы построенные на ссылках на другие файлы (это то что видел лично).
Причём если вам покажется что эти процессы легко автоматизировать — это не совсем так, т.к. процесс может слишком часто меняться ввиду внешних причин/часто присутствует "экпертное мнение"/банально для многих ручных вещей может не существовать более удобного и гибкого инструмента чем эксель :)
Zodiak_smr, пришлось ли отказаться от функционала исходной библиотеки или все необходимое затащили в свою?
Форматирование корректно работает у вас? Текст, чтобы ведущие нули не терялись, не конвертировались в числа/деньги значения, количество нолей после запятой и др.
Для некоторых отчётов эффективно сделать xlsx, который тянет данные напрямую из базы (лучше из реплики) и строит срезы или сводные.
Используя очереди на редис, можно сделать сервис асинхронным и многопоточным, сохраняя результаты в промежуточные временные файлы, а потом просто пересобрать результатирующий файл в нужном порядке.
Данные можно лить в csv используя генераторы (yield) и поток с блокировкой напрямую в файл.
Проблема с совместимостью обычно решается двумя кнопками «скачать для windows (cp1251, ';')» и «скачать для unix (utf8, ',')
Csv насколько я знаю идеально открывается во всех существующих экселях, опендокументах, спредшитах и в чем угодно вообще.
CSV надо импортировать, что требует лишних действий пользователей, а часто ещё необходимо типы данных вручную указывать (текст и др.).
Не открывается он идеально (из личного опыта) выше писал комментарий, если импортировать в эксель из csv, то нужно правильно задавать форматы полей, ну и самое главнре в csv нельзя залить поля текста с переводами строки.
Все там можно в csv с переводом строки, в двойные кавычки многострочный текст и экранирование внутри
Формально да на практике:
"
Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.
“
И
и ещё много чего, статья — https://m.habr.com/company/mailru/blog/129476/
К сожалению приходилось ломать голову как экспортировать и импортировать, реально если подразумевать импорт в excel то универсального варианта не зависящего от настроек у пользователя просто нет.
Но это померкло в сравнении с задачей от другого клиента, которому потребовались фото-отчеты оформленные в формате PowerPoint'a. Вот тут пришлось подумать, но в итоге сделали по томуже принципу: nodejs с библиотекой officegen успешно смог осилить формирование pptx-файлов на 2-5 Gb.
Для этого был изучен формат .xlsx. Оказалось что это обычный архив с кучей xml файлов (данные, стили, настройки...), картинок и прочих вспомогательных файлов. Используя эти файлы как примеры, был создан собственный велосипед с набором необходимых функций, которые работал в сотни (!) раз быстрее и практически не расходовал память. Объем потребляемой памяти не зависил от объема данных.
Правильным выбором оказалось формирование xml файлов без всяких библиотек и готовых решений, а просто путем дозаписи строчек в файл. Именно это позволило не расходовать RAM как большинство других решений и не хранить сложные структуры данных в памяти. После формирования всех xml файлов и добавления вспомогательных статических файлов и изображений, они архивировались и получался готовый .xlsx файл.
Совсем другое дело doc…
Отличная идея, спасибо, тоже
PHP, YII2 и формирование больших excel-файлов