Создание документа Word с помощью библиотеки объектов Microsoft Word

У меня есть приложение веб-форм ASP.NET 4.5, работающее на IIS 7.5. Я создал страницу, на которой пользователь вводит некоторую информацию и выбирает некоторые вещи. Внизу страницы у меня есть кнопка, которая создает текстовый документ.

Как ?

Я использую библиотеку объектов Microsoft Word и загрузил шаблон документа Word. В нем я добавил поля MergeField, на которые ссылаюсь в коде, и инициализировал их. Это отлично работает локально. Когда я загрузил приложение на сервер... большой сюрприз:

Ошибка сервера в приложении '/' Не удалось получить фабрику классов COM для компонента с CLSID {000209FF-0000-0000-C000-000000000046} из-за следующей ошибки: 80070005 Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)).

ASP.NET не авторизован для доступа к запрошенному ресурсу. Рассмотрите возможность предоставления прав доступа к ресурсу удостоверению запроса ASP.NET. ASP.NET имеет базовое удостоверение процесса (обычно {MACHINE}\ASPNET в IIS 5 или Network Service в IIS 6 и IIS 7, а также настроенное удостоверение пула приложений в IIS 7.5), которое используется, если приложение не олицетворяет. Если приложение олицетворяет через , идентификатором будет анонимный пользователь (обычно IUSR_MACHINENAME) или аутентифицированный пользователь запроса.

Чтобы предоставить ASP.NET доступ к файлу, щелкните файл правой кнопкой мыши в проводнике, выберите «Свойства» и перейдите на вкладку «Безопасность». Нажмите «Добавить», чтобы добавить соответствующего пользователя или группу. Выделите учетную запись ASP.NET и установите флажки для требуемого доступа.

Странно то, что у меня есть еще несколько файлов в папке, куда я загрузил этот шаблон документа Word. Они отлично работают внутри одного и того же приложения. Я использую несколько шаблонов Excel. Это явно связано с отсутствием доступа, но почему и как я могу это исправить?

Я попытался следовать инструкциям и щелкнул правой кнопкой мыши, чтобы увидеть свойства безопасности. В нем уже добавлены группы и назначены полные права. Почему он не может получить к нему доступ? Было бы неплохо упомянуть здесь, что я использую олицетворение.

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

Спасибо!


person Cosmos24Magic    schedule 22.09.2017    source источник
comment
Использование автоматизации Microsoft Office (Word, Excel, PowerPoint и т. д.) на основе Microsoft.Office.Interop в серверной среде (например, IIS) не поддерживается корпорацией Майкрософт и также очень подвержено ошибкам. Возможно, обратите внимание на альтернативные библиотеки, такие как OpenXML (или другие библиотеки на ее основе), которые работают с файлами напрямую, а не автоматизируют настольное приложение Office. Для получения дополнительной информации перейдите по следующей ссылке поддержки от Microsoft: support.microsoft.com/en-us/help/257757/   -  person bassfader    schedule 22.09.2017
comment
Спасибо за ваш ответ. Я понимаю, что вы имеете в виду, но я не хочу в это верить. (шучу). Почему до сих пор существуют документация и руководства по использованию взаимодействия в asp.net, если оно не поддерживается? Просто тратить время людей? Я посмотрю на OpenXML. Вроде то что мне нужно. У меня была точно такая же проблема с Excel, и в итоге я использовал EPPlus вместо взаимодействия.   -  person Cosmos24Magic    schedule 22.09.2017
comment
Возможный дубликат OpenXML SDK 2.0 и Aspose для создания документов Word 2007 на стороне сервера в .NET   -  person Lex Li    schedule 22.09.2017
comment
Microsoft никогда не публикует документацию или учебные пособия по автоматизации Office в ASP.NET, но публикует статью базы знаний. Вся документация или учебные пособия для сообщества недоступны для них, и вы, как читатель, несете ответственность за то, чтобы отфильтровать правду от лжи.   -  person Lex Li    schedule 22.09.2017
comment
Моя ветка не похожа на OpenXML vs Aspose. Я не ищу сравнения, и мне не интересен Aspose. Основная проблема с OpenXML заключается в том, что с ним сложно работать. Я хочу использовать его для замены полей слияния из шаблона документа и сохранить его как текстовый документ. Interop может очень легко заменить поля слияния. Я пытаюсь переключиться на OpenXML прямо сейчас, но не знаю, как заменить эти поля слияния. Любая помощь приветствуется. Спасибо!   -  person Cosmos24Magic    schedule 25.09.2017
comment
Лучше всего (IMHO) просматривать разные файлы с помощью Open XML SDK Productivity Tool, который обычно устанавливается вместе с OpenXML SDK. Он может генерировать код из документа OpenXML, а также предоставляет функциональные возможности для сравнения содержимого двух документов. Итак, в вашем случае я бы предложил создать файл с 1 заполнителем поля слияния, затем создать копию файла и заполнить некоторый текст, а затем, наконец, сравнить оба файла с помощью инструмента повышения производительности OpenXML, чтобы увидеть, что изменилось (в XML и/или код).   -  person bassfader    schedule 25.09.2017
comment
Спасибо! Это действительно помогло! Я смог увидеть структуру и понять ее лучше. Мне удалось заменить поля слияния, но теперь я борюсь с закладками. В документе Word у меня есть многострочный текст, несколько маркированных списков и т. д., и я добавил его в закладки, чтобы вставить его в поле слияния из исходного шаблона слова. Это прекрасно работает в Interop, и это очень легко сделать. Но в OpenXML не так много. Итак, я использовал этот инструмент и заметил, что внутри каждого BookmarkStart есть Run для каждой строки. Поэтому мне просто нужно пройти через эти прогоны, чтобы получить данные. Есть ли лучший способ сделать это?   -  person Cosmos24Magic    schedule 26.09.2017
comment
@Cosmos24Magic Microsoft никогда не поддерживала автоматизацию Office на стороне сервера. Например. support.microsoft.com/ en-us/help/257757/ Разработчики могут использовать автоматизацию в Microsoft Office для создания собственных решений, использующих возможности и функции, встроенные в продукт Office. Хотя такая программная разработка может быть относительно легко реализована в клиентской системе, может возникнуть ряд сложностей, если автоматизация выполняется из кода на стороне сервера, такого как Microsoft Active Server Pages (ASP), ASP.NET, DCOM или Windows NT. услуга   -  person user3285954    schedule 06.11.2017