2012-05-31 2 views
15

Я пытаюсь открыть файл .docx и преобразовать в PDF с помощью Interop.Word.Application. Он работает как консольное приложение, но если я использую его в своем веб-приложении, он не работает. Я попытался увидеть разрешения в папке. Я дал «Network Service» с полным контролем, но все же я получаю ссылку на объект, не установленную в word.Documents.Open. Не могли бы вы сообщить мне, что может быть проблемой? Я застрял в этой ошибке. Пожалуйста, дайте мне знать. Я ценю любые предложения. Спасибо.Interop.Word Documents.Open is null

Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); 

    object oMissing = System.Reflection.Missing.Value; 

    word.Visible = false; 
    word.ScreenUpdating = false; 
    string fileName = @"c:\OUTPUT\test.docx"); 
    Document doc = word.Documents.Open(filename, ref oMissing, 
      ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
      ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
      ref oMissing, ref oMissing, ref oMissing, ref oMissing); 
     doc.Activate(); 
+0

К сожалению, я не могу вам точно, но я сильно советую против использования Office, Interop в веб-приложение, MS советуют против него, и, насколько я знаю, офис не лицензирован для использования на веб-сервере. Извините, если это не имеет к вам отношения, есть много сторонних компонентов, которые будут выполнять это для вас, но я никогда не использовал открытый исходный код. –

+0

Есть ли что-нибудь в журнале событий? –

+2

В этом коде есть ошибка. string fileName = @ "c: \ OUTPUT \ test.docx"); <--- имеет завершающий ')'. отправьте фактический код, который находится в вашем приложении. –

ответ

0

Как утверждает Поли в своем комментарии к ОП, я думаю, что проблема в основном связана с библиотеками на веб-сервере. Возможно, вы сможете взломать эту работу в веб-приложении, но я бы посоветовал это сделать.

EDIT: Argh, я неправильно прочитал сообщение и только что принял Excel. Это то, что большинство людей ищут при использовании Office.Interop в моем опыте;)

Открытая библиотека, которая работает с форматами DocX (enter link description here). К сожалению он допускает на странице, что преобразование в форматы, такие как PDF это практически невозможно без библиотек Office.Interop (http://cathalscorner.blogspot.com/2009/10/converting-docx-into-doc-pdf-html.html)

Here является «перспективной» альтернативой, но YMMV.

+0

EPPlus - библиотека Excel. Как это могло бы помочь ему преобразовать слово doc в PDF. –

+0

EDITED с некоторыми действительно полезной информацией сейчас. * Sadface @ DV * – Killnine

0

Скорее всего, у вас есть другое слово dll на вашем веб-сервере, возможно, более старое. Я предлагаю вам ссылаться на определенную DLL и копировать ее на веб-сервер, поэтому вы можете быть уверены, что используете одно и то же слово dll, с которым вы тестировали свой код, и знаете, что он работает. При использовании interop могут возникнуть некоторые проблемы, однако слово interop - единственное, что вы можете быть уверены, что он будет правильно преобразовывать файлы слов.

50

Если вы все еще ищете ответ, я нашел его всего лишь минуту назад для моего проекта.

Открыть DCOM Config Settings:

  1. Start ->dcomcnfg.exe
  2. Компьютер
  3. Локальный компьютер
  4. Config DCOM
  5. Поиск Microsoft Word 97-2003 Documents -> Свойства

Tab Identity, изменение от Launching User до Interactive User

+2

Это работает !!! Спасибо!!! – saille

+7

Обратите внимание, что на Windows 64-разрядной ОС вы должны запустить MMC в 32-битном режиме MMC -32, а затем добавить компонентные службы. Другое. Вы видите только 64-битные компоненты. См. ИТ с Schprit http://schprit.blogspot.com/2010/11/using-microsoft-office-2007-with-dcom.html –

+6

Это решение работает, да, но только если пользователь зарегистрировался на сервере, все время. На странице http://support2.microsoft.com/kb/176799 говорится: «Интерактивный пользователь: приложение будет запускаться с использованием контекста безопасности пользователя, который в настоящее время зарегистрирован на компьютере. Если этот параметр выбран и пользователь не зарегистрирован on, то приложение не запустится ». – GR7

16

Попробуйте это, это может вам помочь.

  • Создать новый "Desktop" каталог внутри "C: \ Windows \ SysWOW64 \ Config \ systemprofile \"

это работает для меня после того, как долго долго долгого дня поиска решения.

Это шов, чтобы быть проблемой профиля.

+0

Это помогло, спасибо! –

+0

На этом пути уже есть папка с именем «Рабочий стол», но ее не работает. – ShaileshDev

+0

Работал для меня. Благодарю. – Alpesh

1

Это сработало для меня. https://social.msdn.microsoft.com/Forums/en-US/0f5448a7-72ed-4f16-8b87-922b71892e07/word-2007-documentsopen-returns-null-in-aspnet.

Если Helpe вы, пожалуйста, сделайте это ответить

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. – OhBeWise