Вопрос по c#, ms-word, asp.net-4.0, asp.net, openxml – Interop.Word Documents.Open is null

16

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

    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();
Ответ с созданием папки Desktop помог мне:stackoverflow.com/questions/1006923/… zchpit
Есть ли что-нибудь в журнале событий? Paulie Waulie
В журнале событий ничего нет. nav100
В этом коде есть ошибка. строка fileName = @ & quot; c: \ OUTPUT \ test.docx & quot;); & lt; --- имеет трейлинг), пожалуйста, опубликуйте фактический код, указанный в вашем приложении. Eoin Campbell
Извините, я не могу вам точно помочь, но я бы настоятельно рекомендовал не использовать Office Interop в веб-приложении, MS советует против этого, и, насколько мне известно, Office не лицензирован для использования на веб-сервере. Извините, если это не имеет отношения к вам, есть много сторонних компонентов, которые бы выполнили это для вас, но я никогда не использовал открытый исходный код. Paulie Waulie

Ваш Ответ

7   ответов
0

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

0

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

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

Есть открытая библиотека, которая работает с форматами DocX (введите описание ссылки здесь). Unfortunately он признает на странице, что преобразование в форматы, такие как PDF, практически невозможно без библиотек Office.Interop (http://cathalscorner.blogspot.com/2009/10/converting-docx-into-doc-pdf-html.html)

Вот является "многообещающим" альтернатива, но YMMV.

EPPlus - это библиотека Excel. Как это поможет ему преобразовать слово документ в PDF.
Отредактировано с действительно полезной информацией сейчас.Sadface @ DV
0

Я сделал следующие шаги, и все заработало нормально:

  • Create the desktop folder
  • Change the DCOM element to login with a specific user instead of an launching/interactive user
  • Changed the service so it started as the same specific user
1

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

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

Хотя это может теоретически ответить на вопрос,it would be preferable включить основные части ответа здесь и предоставить ссылку для справки.
16

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

  • Create a new "Desktop" directory inside of "C:\Windows\SysWOW64\config\systemprofile\"

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

Это кажется проблемой профиля.

Работал на меня. Благодарю.
Уже существует папка с именем & quot; Рабочий стол & quot; на этом пути, но пока не работает.
Это помогло, спасибо!
58

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

Откройте настройки конфигурации DCOM:

  1. Start -> dcomcnfg.exe
  2. Computer
  3. Local Computer
  4. Config DCOM
  5. Search for Microsoft Word 97-2003 Documents -> Properties

табуляцияIdentity, меняться отLaunching User вInteractive User

Вау, ты супер звезда Джанни! У меня ушла неделя, чтобы найти этот пост!
Это работает!!! Спасибо!!!
Это решение работает, да, но только если пользователь все время входит на сервер. Отsupport2.microsoft.com/kb/176799, гласит: «Интерактивный пользователь: приложение будет запускаться с использованием контекста безопасности пользователя, который в данный момент вошел на компьютер. Если выбран этот параметр и пользователь не вошел в систему, приложение не запустится. & Quot;
Обратите внимание, что в 64-битной ОС Windows необходимо запустить MMC в 32-битном режиме MMC -32, а затем добавить в Службы компонентов. В противном случае вы видите только 64-битные компоненты. Смотрите ЭТО со Schpritschprit.blogspot.com/2010/11/…
@ShaileshDev посмотриstackoverflow.com/a/49321264/513401
0

Чтобы решить это, я должен был сделать обе вещи:

  • Create the directories:

    • C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft \Windows\INetCac‌he
    • C:\Windows\System32\config\systemprofile\Desktop
  • Enable DCOM setting as @gianni-b says.

Если вы пытаетесь найти запись DCOM из-за другого языка, вы можете сделать это:

  1. Start Menu > regedit
  2. Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{00020906-0000-0000-C000-000000000046}
  3. Right click > New > String value

    • For Key, put RunAs
    • For Value, put Interactive User

Вы можете сделать то же самое для Excel на AppID{00020812-0000-0000-C000-000000000046}.

Похожие вопросы