Pull to refresh

Comments 31

О, это интересно.
Для полноты картины, ни подскажете, как сгенерированный док можно распечатать без «MS Office»?
Загрузить его на Google Docs, к примеру. Или из OpenOffice. Есть ещё много вьюеров.
Если интересует задача «распечатывания» из c#, то я, к сожалению, с ней не сталкивался. Подозреваю, что это получится сделать только через API вьюера или ворда (через COM). Хотя может есть либы.
Спасибо, как один из вариантов пригодится. Вроде, телодвижений совсем немного.
Использовал эту библиотеку для генерации xlsx отчетов для определенных входных данных, которые потом должны анализироваться экспертами. Так получилось, что отчеты могли содержать сотни тысяч строк(данные записывались в таблицы с возможностью фильтрации по столбцам итд).

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

Сохранение такого документа тоже затратно по времени(например время на процессинг данных занимал 4 секунды, экспорт в xlsx — 16 секунд). В общем для подобных случаев больше подходит генерация xml с применением xslt-преобразования для openxml, сурово, но быстро :) Или сторонние библиотеки для работы с openxml, они есть, но платные. Также не понравилась как реализованы фичи типа добавления стилей в документ, настолько все через задницу, что пользоваться тяжело, в общем лучше бы они нормальное api писали для генерации документов, а не то что сейчас.
На таких больших данных не тестировал, спасибо что предупредили — думаю будет полезно. А на обычных отчётах, которые юзверей экспортируют, работает приемлемо.
Кстати, так плохо себя показала 1я или 2я версия библиотеки?
2ая версия, с первой не довелось сталкиваться.
Это третий вариант + изобретание велосипеда из BCL (встроенный Sysytem.IO.Packaging заменили на ручную компресию через либу зипования. Короче двойной велосипед. Так сказать чертыре колеса.
>>>Его можно переименовать в zip, открыть архиватором и рассмотреть, что внутри…
Hint: А если у вас есть Total Commander (а он есть у многих), то достаточно выполнить над файлом Ctrl+PageDown, и вы заходите в .docx как в обычный каталог. Ну разве это не прелесть?
Прелесть, постоянно пользуюсь. Ещё здорово, что он умеет в msi-ки так заходить.
ctrl+стрелка вверх откроет в новой вкладке.
А еще можно запихнуть внутрь документа xml и прибиндить его к полям внутри документа (биндинг двухсторонний, на поля можно установить запрет редактирования/удаления).
Если инсталл создаем своего приложения, то нужно только эту библиотеку включать?
Не проверяли, насколько больше размер инсталяшки становится?
Понятно, что в любом случае это меньше (и бесплатней), чем офис :) Для виртуальной машины вообще замечательно.

Сравнение файлов — это сервис для приложений с многоверсионностью документов? Не совсем понял для чего юзать сравнение файлов.
Да, включать в инсталл надо только её, её размер — около 5 мб, в зазипанном виде — 1.3 мб. Размер инсталляшки увеличится на что-то среднее между.
Сравнение файлов — это сравнение двух доков на уровне xml. Я юзаю для того, чтобы посмотреть, что именно вставит word в xml, например, чтобы сделать абзац цветом (иногда это неочевидно). Оттуда копирую кусочек кода и вставляю в свой код, который генерит отчёт.
Например, надо добавить колонтитул. Неохота лезть в доки по OpenXml или гуглить. Добавил в ворде, сравнил со старой версией — и вот ответ. В качестве плюшки есть даже и код, можно скопипастить.
> Его можно переименовать в zip, открыть архиватором и рассмотреть, что внутри…

21-ый век… Виндовс и Ко определяют тип содержимого файла по расширению.

Есть очень неприятная задачка. Нжно генерировать docx на сервере на LAMP. Что можете посоветовать? Только брутальный вариант?
Можно проверить работает ли эта либа под Моно. Вероятность что работает высока, так как можно потдерживает ту часть которая свзяана ОПФ. Если попробуете, раскажите.
phpexcel, phpdocx, но библиотеки мострозные. если есть время — я бы посоветовал рахобраться с форматом на уровне XML и написать свои классы
Run run2 = new Run() { RsidRunProperties = "00184031" };

не люблю магические числа
Я так и не понял зачем необязательные RSid ы и rsidPr читать/писать.
Как пишет
The rsid element is used to allow applications to more effectively merge two documents that have forked. ориг

Они используются для более эффективного слияния изменений одного документа.
Оффтоп:
Скажите, откуда у вас такое удобное меню добавления сборок в проект взялось? Это как часть SP1?
UFO just landed and posted this here
Заметил неприятную особенность с этим аддоном.

Допустим, мы имеем 2 солюшена в двух отдельных папках, у каждого свой Output:
Shared, Output: Shared/bin
Main, Output: Main/bin

Когда добавляю референс из проекта Main на один из проектов Shared, почему-то Location референса вместо Shared/bin/… прописывается Main/bin/…

Это приводит к проблемам при автоматизации сборок (TFS, TeamCity), пришлось отключить.
Очень странная штука. Напишите им, думаю, пофиксят — всем будет лучше
UFO just landed and posted this here
Для генерации документу нужен установленный Office?
Есть варианты без него?
Нет, офис не нужен. Нужна только сборка DocumentFormat.OpenXml.
А при создании десктопного ли Silverlight приложения проще использовать Custom XML Parts
Эх, если бы кто написал, как за приемлемое время можно из docx получить html — ценыб ему бы не было. Особенно в свете приближающегося МЭДО.
Спасибо Вам за эту статью, через время, через целых восемь лет она меня спасла!!! Спасла от необходимости изучения кода по построению графиков в Excel через OpenXML!!! Спасибо!
Only those users with full accounts are able to leave comments. Log in, please.

Articles