Re: Работа с Word в ASP.NET
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 27.05.14 16:17
Оценка: 30 (2) +1
Здравствуйте, Mazenrab, Вы писали:

M>И да, насколько реально опасно использовать COM Ms Office на сервере?

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

M>Посоветуйте что-нибудь приличное для генерации word-документов из шаблонов.

Если вы работаете с docx, то я настоятельно рекомендую посмотреть на такой механизм как Content Controls. С вашего позволения я сошлюсь на ряд своих статей по этой теме:

Если интересно, можете для начала поиграться с примером — генерация "отчета по совещанию"
Re: Работа с Word в ASP.NET
От: vmpire Россия  
Дата: 27.05.14 14:24
Оценка: 25 (2) +1
Здравствуйте, Mazenrab, Вы писали:

M>И да, насколько реально опасно использовать COM Ms Office на сервере?

Будут проблемы с многопоточной работой и одним компенентом.
И с условиями лицензирования неясно, насколько это разрешается.
Re: Работа с Word в ASP.NET
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 28.05.14 16:04
Оценка: 25 (2) +1
Здравствуйте, Mazenrab, Вы писали:

M>И да, насколько реально опасно использовать COM Ms Office на сервере?


Настоятельно не советуют:

Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.

HgLab: Mercurial Server and Repository Management for Windows
Re[3]: Работа с Word в ASP.NET
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 29.05.14 09:12
Оценка: 15 (1)
Здравствуйте, Mazenrab, Вы писали:

M>Благодарю, буду изучать. Я правильно понимаю что это, по сути, тот же Open XML?

Если вы имеете в виду формат OpenXML, то да, данная функциональность доступна только в файлах этого формата (поэтому я и уточнил про работу с docx-это WordProcessingML документ).
Если же вы имели в виду Open XML SDK, то он здесь фактически не применяестя — он нужен только для вставки XML-данных, которые будут использоваться при генерации документа, но это можно легко обойти и заменять нужную Part документа, используя только System.IO.Packaging.

Вообще, чтоб было понятно как это работает:
  1. Вы открываете Word и создаете в нем документ-шаблон (можете взять готовый доекмент или свалить все на секретаря — в этом особая прелесть, т.к. документы может готовить специалист-предметник!). В те места, куда должны будут подставляться данные, вы вставляете элементы Content Controls. Получается примерно вот такой документ
  2. Затем вы привязываете вставленные Content Controls к XML с данными (Custom XML), которая хранится в самом документе (в отдельной его части). Это вы делаете используя или сам Word (в версии 2013 и старше) или бесплатную утилиту Word Content Control Toolkit (к сожалению, она не умеет работать с Repeating Sections, кокторые появились в Word 2013 и используюятся для таблиц и списков).
  3. Пишете код, либо с помошью Open XML SDK (немного проще), либо System.IO.Packaging (не сильно сложнее), который заменяет Custom XML на аналогичную по структуре, но уже с реальными данными.
  4. Пользователи получают ваш готовый документ, открывают, а Word все рендерит.

Конечно, у подхода есть и свои недостатки/ограничения, например, таблицы с переменным числом строк можно сделать только начиная с 2013 офиса (и работать будут только там), а с переменным числом столбцов нельзя до сих пор. Или не получится делать изменение форматов (например, в зависимости от данных подкрасить текст разными цветами) — только вставка самих данных.

Но есть и плюсы:
Re[5]: Работа с Word в ASP.NET
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 29.05.14 12:13
Оценка: 12 (1)
Здравствуйте, Mazenrab, Вы писали:

M>Михаил, спасибо за развернутый ответ...мне вот что осталось непонятно — 2013 офис нужен только для формирования шаблона с повторяющимися секциями? Т.е. достаточно его иметь только у разработчиков или же у конечного пользователя тоже должен быть 13 офис?

Если вам нужны в шаблонах повторяющиеся секции (т.е. таблицы и списки), то 2013 офис, нужен и у разработчиков и у пользователей. Увы.

У Microsoft ранее был в Word механизм, позволявший оперировать в Word переменным числом элементов для вставки и извлечения данных (он правда тоже назывался Custom XML из-за чего теперь есть некоторая путаница с Custom XML для Content Controls), но из-за иска i4i механизм был отключен. А сделать полную замену (или близко к тому) смогли только в Office 2013.

Посему, если в ваших отчетах нужны таблицы переменной величины а Office 2013 не доступен, то мне видятся следующие вараинты:

1. Сделать свой шаблонизатор. Например, можно размечать места для вставки с помощью bookmarks. Затем в документе находить нужные букмарки и вставлять реальные данные.
Тут потребуется некая библиотека, которая может не только формировать, но и читать документы. У Infragistics, похоже есть средства лишь для формирования документов с 0. Поэтому назову те, что знаю:

2. Использовать какой-нибудь генератор отчетов, который поддерживает вывод в doc/docx
Например:

3. Сделать VSTO-плагин, уровня документа, который будет подставлять данные в поля документа (и расширять таблицу(ы) при необходимости). Сами данные при этом будут кэшироваться в документе (хотя в данном случае документ может вообще сам лазить куда надо за данными, но вам такое врятли нужно), а для обновления этих данных использовать специальный серверный класс Microsoft.VisualStudio.Tools.Applications.ServerDocument — он работает без использования Office.
Но тут уже надо смотреть, т.к. использование VSTO накладывает свои ограничения (например нужно устанавливать/обнолять плагины на машинах пользователей).
Если все же задумаетесь о таком варианте, то посмотрите на статью Managing Documents on a Server by Using the ServerDocument Class, а вообще про VSTO вцелом очень рекомендую книгу Eric Carter, Eric Lippert, Visual Studio Tools for Office 2007: VSTO for Excel, Word, and Outlook

4. Ну и самая, наверное экзотика (хотя почему?) — а не думали ли вы над вариантом формирования Excel-документов? Дело в том, что с Excel можно работать наподобие того, как работаете с Content Controls, причем там-то ограничений на рост таблиц в высоту отродясь не было
Если интересно, то в целом все выглядит так:
  1. Вы готовите XSD схему для данных, которые будете выгружать
  2. Пользователи (разработчик документа) открывают вашу схему из Excel (наверняка есть механизм как все ваши схемы протолкнуть через групповые политики или аналоги, чтобы пользователям не нужно было даже файлы XSD открывать) и мышкой перетаскивают узлы дерева на нужные ячейки.
    Выглядит примерно так:

  3. Вы генерируите xml с данными и при помощи или VBA, или .Net + VSTO, или .Net + OpenXML SDK (если будете работать с xlsx-файлами) вставляете этот xml в документ.

Надеюсь, что что-то из этого будет вам полезно.
Re: Работа с Word в ASP.NET
От: andrey82  
Дата: 27.05.14 14:03
Оценка: 10 (1)
Здравствуйте, Mazenrab, Вы писали:

M>Всем привет!


M>Посоветуйте что-нибудь приличное для генерации word-документов из шаблонов.


Open XML SDK ? Или надо создание именно .doc?

M>Раньше я использовал WordDocumentWriter от Infragistics, но у него нет возможности работать с шаблонами.


Если под шаблоном понимать готовый документ с закладками, заменяемыми на значения, то с OpenXML это можно.

M>И да, насколько реально опасно использовать COM Ms Office на сервере?

Microsoft настоятельно не рекомендует
Работа с Word в ASP.NET
От: Mazenrab Россия http://www.electrica.ru
Дата: 27.05.14 13:52
Оценка:
Всем привет!

Посоветуйте что-нибудь приличное для генерации word-документов из шаблонов.

Раньше я использовал WordDocumentWriter от Infragistics, но у него нет возможности работать с шаблонами.

И да, насколько реально опасно использовать COM Ms Office на сервере?
Re[2]: Работа с Word в ASP.NET
От: Mazenrab Россия http://www.electrica.ru
Дата: 29.05.14 08:19
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, Mazenrab, Вы писали:


M>>И да, насколько реально опасно использовать COM Ms Office на сервере?

МР>Да в общем-то особой опасности и нет (по крайней мере я не знаю в чем она может состоять), но добиться стабильной работы довольно сложно.

M>>Посоветуйте что-нибудь приличное для генерации word-документов из шаблонов.

МР>Если вы работаете с docx, то я настоятельно рекомендую посмотреть на такой механизм как Content Controls. С вашего позволения я сошлюсь на ряд своих статей по этой теме:
МР>
МР>Если интересно, можете для начала поиграться с примером — генерация "отчета по совещанию"


Благодарю, буду изучать. Я правильно понимаю что это, по сути, тот же Open XML?
Re[2]: Работа с Word в ASP.NET
От: Mazenrab Россия http://www.electrica.ru
Дата: 29.05.14 08:20
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Здравствуйте, Mazenrab, Вы писали:


M>>И да, насколько реально опасно использовать COM Ms Office на сервере?


Н>Настоятельно не советуют:


Н>

Н>Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.


Да, спасибо — это я читал Уточнял на всякий случай вдруг сообщество считает иначе
Re[4]: Работа с Word в ASP.NET
От: Mazenrab Россия http://www.electrica.ru
Дата: 29.05.14 10:40
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, Mazenrab, Вы писали:


M>>Благодарю, буду изучать. Я правильно понимаю что это, по сути, тот же Open XML?

МР>Если вы имеете в виду формат OpenXML, то да, данная функциональность доступна только в файлах этого формата (поэтому я и уточнил про работу с docx-это WordProcessingML документ).
МР>Если же вы имели в виду Open XML SDK, то он здесь фактически не применяестя — он нужен только для вставки XML-данных, которые будут использоваться при генерации документа, но это можно легко обойти и заменять нужную Part документа, используя только System.IO.Packaging.

МР>Вообще, чтоб было понятно как это работает:

МР>

    МР>
  1. Вы открываете Word и создаете в нем документ-шаблон (можете взять готовый доекмент или свалить все на секретаря — в этом особая прелесть, т.к. документы может готовить специалист-предметник!). В те места, куда должны будут подставляться данные, вы вставляете элементы Content Controls. Получается примерно вот такой документ http://mihailromanov.files.wordpress.com/2013/09/image48.png
    МР>
  2. Затем вы привязываете вставленные Content Controls к XML с данными (Custom XML), которая хранится в самом документе (в отдельной его части). Это вы делаете используя или сам Word (в версии 2013 и старше) или бесплатную утилиту Word Content Control Toolkit (к сожалению, она не умеет работать с Repeating Sections, кокторые появились в Word 2013 и используюятся для таблиц и списков).
    МР>
  3. Пишете код, либо с помошью Open XML SDK (немного проще), либо System.IO.Packaging (не сильно сложнее), который заменяет Custom XML на аналогичную по структуре, но уже с реальными данными.
    МР>
  4. Пользователи получают ваш готовый документ, открывают, а Word все рендерит.
    МР>

МР>Конечно, у подхода есть и свои недостатки/ограничения, например, таблицы с переменным числом строк можно сделать только начиная с 2013 офиса (и работать будут только там), а с переменным числом столбцов нельзя до сих пор. Или не получится делать изменение форматов (например, в зависимости от данных подкрасить текст разными цветами) — только вставка самих данных.


МР>Но есть и плюсы:

МР>
Михаил, спасибо за развернутый ответ...мне вот что осталось непонятно — 2013 офис нужен только для формирования шаблона с повторяющимися секциями? Т.е. достаточно его иметь только у разработчиков или же у конечного пользователя тоже должен быть 13 офис? У нас сейчас ситуация такая. У всех в компании 10 офис и поменять его на 13 нельзя, но мы (разработчики) можем себе его поставить.
Re: Работа с Word в ASP.NET
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 30.05.14 10:21
Оценка:
Здравствуйте, Mazenrab, Вы писали:

M>Посоветуйте что-нибудь приличное для генерации word-документов из шаблонов.

И если не сложно — отпишитесь потом, на каком решении решите остановиться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.