Pull to refresh

Comments 74

Хорошая информация. Ещё бы формат ворда так разобрать, если это возможно. По-моему он хоть и в XML, но дико какой-то сложный.

Микрософт совершила большую ошибку в своё время, что для выбрала закрытый формат. В конце 90х я имел дело с LaTex — отличная вещь наподобие того же HTML, только сильно мощнее для формул и для подготовки книг и статей для печати. Но главный плюс в том, что формат читаемый, можно руками набирать. А майкрософт офис много крови всем попил. С закрытыми форматами была проблема и с генерацией документов и с их отображением.

У Google Docs те же грабли. В прошлом году делал там параметризацию документов, их API — сущий ад. Нет чтобы взять открытый формат и дать всем возможность редактировать документы в исходниках.

Я давно работал с word, но только поверхностно, в глубь не лез.

Если мне будет под силу разобрать его - то напишу статью

Микрософт совершила большую ошибку в своё время, что для выбрала закрытый формат.
Это для кого ошибка? Чем тяжелее для альтернатив открывать файлы Офиса, тем больше будет куплено Офисов.
На днях отрывал 30-мегабайтный xlsx, распакованный на порядок больше — с открытием можно сказать что справились OnlyOffice и свежий 7.2 LibreOffice (6.4 не осилил). Процесс потребовал несколько минут времени и до 6 ГБ ОЗУ.
Отдельное спасибо авторам таких документов.

Так как я занимался рассмотрением и сравнением двух форматов Office Open XML и OpenDocument Format, могу сказать и уверить в том, что в первом случае часть фичь и тем более фунций + дефолтных значений и некоторых стилей - скрыты под капотом. Вроде и есть свободный формат, вроде и есть дока (сущий ад на мой взгляд), но не всё так прозаично как может казаться)

Даже если дока -- сущий ад, это всё же не повод отказывать формату в том, чтобы называться открытым. Язык C++, к примеру, тоже по одному только тексту стандарта изучить или реализовать практически невозможно. А вот если в документации формата отсутствует какая-то конкретная важная информация, то об этом было бы интересно узнать. Именно на максимально конкретных примерах.

Офис был бы куплен всё равно. Правда с появлением Google.docs офис почти умер.

Ошибка как раз для Микрософта. Народ использовал другие форматы. Например, мы используем HTML для многих документов. Потому что его сильно проще и быстрее обновить.

И если бы формат офиса был открытым, то продукт типа гугл.докс появился бы сильно раньше, и не только он один. Майкрософт бы такой продукт либо купил либо сам бы сделал. Майкрософт потерял практически этот рынок сейчас. Все перешли на гуглюдокс. Собственно у Майкрософта есть шанс, запустить аналог гуглюдокс, но с простым открытым форматом, который будет легко генерить программно и ручками. Тогда будет смысл перейти всем на этот формат и генерить документы в нём.

LaTeX не должен был допустить появления MSWord-а. На деле сколько-нибудь сложное форматирование в Google Docs сделать невозможно.

Битву выигрывает тот, у кого лучше маркетинг.

Так и не нужно. Сила в простоте. Зачем сложное форматирование, которое потом едет даже в том же Майкрософт Офис?

Мы у нас в компании последние годы используем Гугл.Докс, да и народ вокруг тоже его использует. Для формул LaTex скорее всего лучше. А для обычной офисной жизни и для написания статей, исковых полностью его хватает. Главное в нём очень удобно организована совместная работа.

В таблицах всё же хотелось бы испольовать больше четырёх арифметических действий, но Г.Д даже кубического корня нет.

А Г.Д удобен совместной работой. Мелкомягких на эту тему с 9х годов пинают.

Извините, а зачем нужен отдельный кубический корень, если есть степень?

У гуглдокс есть встроенные функции и ещё можно JS-код использовать и накодить любых действий. Только там с багами дело было пару лет назад, он временами отваливался. Во всяком случае, у меня один код то работал, то нет.
И спокойно используется SQL-запросы

Правда с появлением Google.docs офис почти умер.

Ну да, как же. Оформите мне хоть один документ по ЕСКД (2.105, 2.610) в гугл.доке. Ну такой, чтобы с полями, рамками, колонтитулами.

Это специфическая задача. У нас в компании нет такого. И полагаю, что у большинства нет. Если вам надо, то мучайтесь с Майкрософт Офисом.

Если у вас чего-то нет, это не означает, что в остальном мире этого нет, у вас просто выборка не репрезентативная.

То же касается и "специфичности" задачи. Практически любое производство в РФ, которое готовит документацию, сталкивается с проблемой оформления по ЕСКД. И даже не смотря на робкие статьи прикрутить ASCIIDOC к ЕСКД, проще найти человека знающего word, отсыпать ему шаблонов, макросов и отправить работать с миром.

Я уж не говорю про требования заказчиков о предоставлении документов в "редактируемом формате" для передачи в электронный архив и прочие секретности, да NDA'шности.

Это у вас выборка нерепрезентативная. Сколько у нас в России производства и сколько у всего остального, где никакого ЕСКД нет. Этого ЕСКД нет в ВУЗах в рабочей документации, в тендерах, в судах. Мелкому бизнесу и физлицам ЕСКД не нужен. Их гораздо больше, чем производства.

Мелкому бизнесу и физлицам, по моему мнению, гуглдокс не нужен. Им не нужны плюшки совместного редактирования, им не надо пересылать кипу документов с гуглоаккаунтов. Их устраивает... встроенный в винду офис. Как максимум видел Либре.

На моей памяти из всех клиентов что я обслуживаю, а это более трех сотен фирм - никто не перешел в на гуглодокс, потому что простенькая выгрузка от поставщика на десяток страниц тормозит в браузере безбожно даже на i5. Кроме этого накладывается зависимость от постоянного онлайна, что с ценами на интернет для юрлиц (в моем регионе это сильно дороже чем физикам) убирает с конкурентного рынка гуглодоки вовсе.

А в ВУЗах и всяких министерствах все еще 2003 не могут до конца убрать. вижу это постоянно в рабочей переписке с ведущими вузами страны, по характерным косякам при перегоне docx->doc в возвращенном письме.

Сколько у нас в России производства и сколько у всего остального, где никакого ЕСКД нет. Этого ЕСКД нет в ВУЗах в рабочей документации, в тендерах, в судах.

В судах? Вы серьезно? Как вы предлагаете с гугло-доком соблюдать 152 ФЗ?

Как пользоваться гугло-доком в закрытых периметрах? Как пользоваться гугло-доком там где интернета или нет или он медленный (привет сёлам и всей инфраструктуре между городами).

Я не знаю сколько всего остального, но не видел ни одного предприятия\организации\ИП которое использовало бы гугло-док в продакшене, как основную систему ведения и разработки документации. Энерго-вырабатывающая промышленность, которая на секундочку местами является градообразующим предприятием, вся сидит на офисе - см. кучу тендеров. То же касается нефтянки и всего прочего.

Даже в шутке "Вся мировая экономика держится на Excel", есть доля шутки.

У нас в компании я уже давно не вижу документов в ворде и екселе. Всё в гугле.

Так что можете и вы теперь говорить, что знаете как минимум одну организацию.

Так что можете и вы теперь говорить, что знаете как минимум одну организацию.

Пилите пост, как ваш отдел кадров, бухгалтерия и прочие отделы (уж не знаю сколько их) соблюдают 152ФЗ. Заодно, как протащили все это через безопасников.

Яб с удовольствием почитал.

При чём тут отдел кадров? Персональные данные хранятся в БД. Все документы у нас по возможности в электронном виде. Те что нужны на бумаге генерятся на php в HTML распечатываются и подписываются. Гугл.Докс нам тут зачем? Гугл.докс используется для нетиповых документов. Статью, исковое написать. А там нет персональных данных. Наличие персональных данных как раз признак того, что документ типовой и должен генериться из базы.

У меня уже пять лет есть специфичная задача: фабрика мебели шлёт жене пару сотен xlsx, в которых надо поменять ячейку, пересчитать формулы и конвертнуть в pdf. За пять лет вышло немало свежих версий либреофиса и опенофиса, но ни одна из них не может нормально конвертнуть в пдф ячейки с картинками, ну хоть ты тресни. Ну и правка файла в либреофисе портит его для экселя, и картинки остаются такими же кривыми в экспорте в либреофисе. То есть либреофис тупо не вариант. В итоге, учитывая нежелание покупать мс офис ради такой фигни пару раз в год, мое решение свелось к следующему: в яве через apache poi правим ячейки и пересчитываем формулы, потом вызываем скрипт autoit, который запускает ms excel viewer для нужного файла и отправляет его на печать на пдф принтер. Дёшево и сердито, но доступно только тем, кто успел обзавестись ms excel viewer-ом, ибо ms его выпилило, как Канада свой перехватчик Avro Arrow - с концами.

Можно долго рассуждать, что аналоги экселя корректно работают в 99%-ах случаев, но мне вот повезло попасть в не тот процент.

Из Libreoffice экспортировать не пробовал, в исходном MS Excel xlsx проверьте, чтобы соседние изображения не соприкасались — тогда они заменяются единым gif'ом с соответствующей потерей качества, если не соприкасаются — экспортируются в jpg с меньшей потерей. Возможно в новых версиях пофикшено.

Ещё есть смысл из массы pdf-принтеров попробовать подобрать подходящий, в котором можно будет настроить качество экспорта, т.к. сохранение в pdf необязательно работает оптимальным образом.
Можно увеличить количество используемой памяти и поиграться с настройкой формата и качества изображений.

А МС да, выпиливает все свои полезные плюшки.

В пдф, сгенерированных либреофисом, картинки начинают выезжать за пределы ячеек, куда они вписаны.

В 2000 писал диплом в QuarkXpress. Не было никаких проблем с рамочками, полями, колонтитулами, расползания и шрифтами. Не знаю почему до сих пор все мучаются с MS Wordом. Работает под Windows 3.11 или 95/98. Под NT не проверял.

  1. QuarkXpress это про верстку для печати. Т.е. чтобы картинка на экране 100% соответствовало тому что вылезет из принтера\печатной станции.

  2. Прямой аналог QuarkXpress это Microsoft Publisher

  3. Цена. 470 евро (~40 000\год) за Кварк и 9 000-12 000\год за офис 365. Или ~17к за фиксированную (не подписочную) версию с word, excel, PP и outlook. Выбор очевиден.

  4. Документы можно хоть в Автокаде оформлять, вопрос лишь в том где меньше боли.

Если сравнивать с QuarkXpress, то тогда стоит учитывать и LibreOffice с ценою (без поддержки) ₽0. Но тут же проблема в том, что все вокруг сидят именно на MS.

Не стоит, Кварк это приложение для публикаций (верстка, печать), Word и Writer это текстовые процессоры. Не смотря на кажущуюся одинаковость и, местами пересекающийся функционал, у этих приложений разное назначение.

QuarkXPress is a desktop publishing software for creating & editing complex page layouts in a WYSIWYG

Writer - A word processor with similar functionality and file support to Microsoft Word or WordPerfect. It has extensive WYSIWYG word processing capabilities, but can also be used as a basic text editor.

Правда с появлением Google.docs офис почти умер.

Спасибо за поднятие настроения, поржал с этой фразы.

Вы, судя по нику, разработчик из it-конторы, а во всём остальном мире есть, к примеру, x5 retail, которому надо заполнить таблицу с макросами в excel не ниже 2013. И сотрудники, быстро работающие в google docs (если это вообще возможно), на дороге не валяются.

Всё точно так. В финансовых конторах, включая очень большие, типа JP, у всех предустановлен офис с экселем и дофига кода на VBA (исторически и не очень). А у большинства малого бизнеса в Европе есть умный айтишник на подхвате, который понимает, что трахаться с опенсорсом гораздо проблематичнее, чем установить офис и решать проблемы через поддержку мелко-мягких.

Так что офис живее всех живых, несмотря ни на что.

Вы в каком мире живете?) аналог гуглдокс уже давно существует, и называется office 365 в платных редакциях, и как бесплатные веб-приложения в бесплатном onedrive. Насчёт форматов - начиная с момента внедрения форматов office open xml, генерация файлов документов сильно упростилась, по крайней мере что для php, что для python, что для других языков. А так, смотря что вам нужно при генерации документов, кому-то md достаточно, а кто-то из ворда последнее выжимает и после ищет альтернативы - лично для дипломного проекта матрицы тензорных уравнений писал на LaTEX 17 лет назад, потому как ms equations та еще поделка и падала при малейшем дыхании в ее сторону

Ну это как посмотреть. Мне кажется Майкрософт перехитрил сам себя: у меня есть несколько xls файлов, которые в одной версии офиса открываются, а в другой нет. И, что примечательно, пересохранение в xlsx проблемы не решает. Иронично, но приходится открывать их с помощью OpenOffice.
Было подобное в Word. При интенсивном редактировании, и замудренном форматировании получались нередактируемые файлы. Точнее так, закрузить его можно было, но при любой операции (изменения одного символа, просмотре перед печатью, попытка пересохранения приводила к крашу Word. Причем после этого он пытался восстановить файл, загружал сохраненную копию, крашился вновь, и так по кругу если не прервать. Документы и нервы спас какой то бесплатный текстовый редактор? способный открывать doc, но игнорирующий из документа все «нестандартное». После чего отфильтрованный файл сохранялся в RTF, и благополучно допиливался в Word-е. Чаще всего камнем преткновения становились таблицы (которых в Word нет)

WordPad такое умеет. Является частью Windows до сих пор, хотя в 10 и 11 дали возможность его удалять.

WordPad очень доооолгое время был Блокнотом с минимальными функциями форматирования. А уж открыть в нем DOC, со сложным оформлением, было отдельным квестом, поскольку встретив неподдерживаемую возможность DOC он вываливал окошко «Неподдерживаемая возможность, продолжить загрузку? Да/Нет». А поскольку таких мест в файле было гораздо больше чем одно, требовалось недюжее терпение. Более того в Микрософте, об этой фиче, отлично знали и для чтения и печати документации в формате DOC, (тадам!) выпускали бесплатную программу WordViewer для просмотра DOC.
А также Excel Viewer и даже Access Viewer.
Это да, но на дисках с драйверами обычно встречался только WordViewer :)

У меня Excel как‐то умудрился сохранить файл с большинством формул в локализованном виде. А потом при открытии эти формулы просто выкидывал (правда, не молча, а утверждая, что файл повреждён). LibreOffice при этом ничего не выкидывал, но и формулы не считал. Проблема решилась нахождением последней рабочей версии в СКВ, сравнении текущей с ней в распакованном виде (после LibreOffice мне стало только понятно, что формулы там есть, а не что с ними не так) и делокализацией скриптами на VimL с последующей запаковкой обратно.


И я не помню, чтобы я обновлял в это время Office, или трогал связанные с локализацей настройки.

Забавно, но пару раз (довольно давно) сталкивался со следующей ситуацией:

Excel отказывается открывать последнюю сохранённую копию файла (без объяснения причин);

Открываю файл в OpenOffice или LibreOffice;

Пересохраняю его, как *.xlsx;

Вуаля - Excel открывает файл как родной.

Но главный плюс в том, что формат читаемый, можно руками набирать.

В этом и плюс, и минус. В то время скорость записи на носители данных были очень низкие, и в случае выбора plain text формата вставка фрагмента в начале файла привела бы к необходимости перезаписывать весь файл (несколько мегабайт), что могло занимать минуты. Поэтому они заморочились с бинарным форматом, который позволял при редактировании в середине документа дописывать данные в конце файла.

LaTex компилировался в бинарный формат. И им тоже не мешало ничего свой визивиг прикрутить к формату LaTex. Никаких минут я не помню. У меня в LaTex целая книга была.
Нормально всё записывалось совершенно незаметно.

Микрософт совершила большую ошибку в своё время, что для выбрала закрытый формат.

По-моему здесь же на хабре была статья об экселе, вкратце формат был придуман скорее для быстродействия на тогдашних слабых машинках.

Вероятно имеется в виду статья "Почему форматы файлов Microsoft Office такие сложные".

«Формат файлов запутан в нужных местах для ускорения типичных операций. К примеру, у Excel 95 и 97 была функция «простого сохранения», которая использовалась в качестве ускоренного варианта документа OLE, полная версия которого была не слишком быстрой для повсеместного использования. У Word было нечто подобное под названием „быстрое сохранение“. Для быстрого сохранения длинных документов 14 раз из 15 все изменения просто добавлялись в конец файла, а весь файл не перезаписывался с нуля. Для жёстких дисков того времени это означало, что можно было успеть сохранить документ, допустим, за 1 секунду вместо 30. Также это означало, что удалённые части документа всё ещё хранились в файле – а людям, как оказалось, это не было нужно.»

Хорошая статья. Спасибо.

Если вам также будет интересно - напишу статью, как манипулировать с файлами excel посредством PHP/Java/Ruby

На PHP бы посмотрел. Особенно формулы и стили.

Хорошо, я постараюсь написать в скором об этом

Так альтернатив особо и нет - наследник phpexcel

https://phpspreadsheet.readthedocs.io/en/latest/

Проблема только, что реализация в ООП стиле приводит к падению по памяти на не самых больших документах.

Поэтому да, если файлы тяжелые, приходится работать непосредственно с xml

Я сделал так, что все манипуляции и данные записываются в массивы, а в конце перебором записываются в файлы обычным текстом без дополнительных библиотек, типа работы с xml и прочих дополнительных классов. Мне кажется, за счёт этого я сильно ускорил работу и облегчил по использованию памяти этой задачи.

У меня есть 2 класса: в первом записываются данные, во втором - запись xml и архивация .xlsx файла

Возможно, я изобрёл велосипед, но это, прежде всего, опыт и я хорошо разобрался в устройстве excel

Падение по памяти и производительности скрипта можно исправить рефакторингом кода и уменьшением сложности алгоритмов, чем я сейчас занимаюсь

Спс, я в курсе про PHPExcel, но это такой комбайн, а мне любопытна лишь часть его функционала - рендер в PDF (а точнее в картинку). А ещё PhpSpreadsheet рендерит путем сборки html c css, вдруг есть способ пооптимальнее. Для винды с установленным Excel все очень элегантно решается через Win32 API и буфер обмена, вот хотелось бы и под никсы что-нибудь компактное. И, если со стилями что-то можно придумать, то вот что делать с формулами...

У меня самый большой вопрос по Excel - как вести разработку макросов? И я сейчас не про встроенную IDE и Rubberduck, а про методологию.

Вопросы - где макросы хранятся? В каком формате? Можно ли прикрутить к этому нормальную систему контроля версий? Желательно, не используя импорт\экспорт модулей.

Хороший вопрос

В ближайшее время попробую разобраться с этим, и, если тема будет побеждена - напишу об этом

Я что‐то подобное делал для Word. Там макросы хранятся в бинарном файле, имитирующем файловую систему (OLE2), который много кто умеет разбирать, но мало кто умеет создавать. Я в итоге просто решил хранить документ без макросов в распакованном виде в VCS, отдельно там же хранить макросы и скриптом запаковывать файл обратно с последующим добавлением файлов с макросами посредством API Word.

Документация на английском - не каждый сможет разобраться, она очень большая и потребуется много времени для поиска нужной информации

Но все равно, спасибо за ссылку, кому-нибудь она точно пригодится

да, с этим согласен. сам в свое время штудировал это все неделями. кстати есть ещё OpenXml productivity tool. она позволяет просматривать содержимое office документов, word , excel, ppt, а также генерирует код, правда на C#. https://github.com/OfficeDev/Open-XML-SDK/releases/tag/v2.5

Спасибо за клад, думаю, мне это поможет в разборе word, и, может, дополнительных аспектах excel, которые я в этой статье не разобрал

Можете еще посмотреть wordroller, там только основная функциональность, поэтому он не такой громоздкий, как Open XML SDK.

На самом деле спецификация довольно понятная и позволяет быстро сделать то, что нужно. Но базовые концепции, типа абзацев, ранов, нумераторов — нужно в голову один раз загрузить.
Спасибо за разбор, всегда интересно увидеть внутреннюю кухню формата файла. Однозначно в закладки. Надеюсь что продолжение следует.

Да, уже попросили рассказать про макросы и разбор .docx

Надеюсь победить и выложить статью

подскажите, вы планируете делать и поддерживать собственный PhpSpreadsheet?

Да, я уже написал библиотеку, но пока стыдно выгружать на гит, т.к. код можно оптимизировать и улучшить работу скрипта (я этим занимаюсь и в скором опубликую в общем доступе)

Ну, это уже готовое решение, описание документации. По сути, тот же phpspreadsheet, только работает по своему. Да, такое же колесо, но я решил рассказать не о своей библиотеке, а об устройстве excel.

За ссылку спасибо

Извините, просто обзор "гвоздя", без обзора "молотка", которым гвоздь можно забить мне показался неполным. Вы же начали статью с идеи "разработки библиотеки".

Хотелось бы от вас увидеть аналитический обзор ("молотков") решений для эффективной работы с форматом на каких либо языках, раз уж вы на столько погрузились в данный вопрос.

Возможно это кому-то сохранит время и нервы в дальнейшем.

Да, я как раз сейчас пишу статью о «молотках».

На днях опубликую

Стояла такая же проблема на проекте, но сложнее: нужен экспорт в xls и pptx с графиками и куртизанками из проекта на питоне. Готовых решений нет. Пришлось городить библиотеку на C# с OpenXML SDK и подвязывать ее к питону через pythonnet.

OpenXML SDK - та еще сдк, спроектировано по принципу: "одна строка в ХМЛ - одна строка кода на C#", вообщем пришлось знатно намучаться. Но сильно выручали генераторы кода из ХМЛ в C#.

О, да, openXML SDK - это штука, с которой люди встречаются единожды. (Благо, мне пришлось с ней встретиться только в виде документации)

Возможно, эта статья бы помогла избежать этого хотя бы с excel файлом

Тем более в скором я напишу про дополнительные функции excel - графики, фигуры, макросы и прочее. Пока собираю информацию и изучаю

Помню как-то игрался со стилями в xlsx (ну как, игрался, делал экспорт в excel).
В итоге случайно получилось поменять шрифт, размер шрифта и его начертание для символов нумерации столбцов и строк, причем работало это только в ms excel, страшно представить какие еще там есть недокументированные возможности.
Или фичи как невозможность в некоторых случаях использования большой буквы «Ж» в названии листа Excel из-за трёхслойной обработки нажатий клавиатуры. А ещё есть люди, которые докапываются до истины.

"О сколько нам открытий чудных готовит Office Microsoft".

Пытаюсь делать то же самое на Swift, но постоянно ругается Excel что документ некорректный. Кто-то делал подобное под iOS ?

Sign up to leave a comment.

Articles