C # преобразование .doc в .htm

Я пытаюсь преобразовать файл .doc в формат .htm для просмотра на странице ASP.NET MVC.

Я использую следующий код на C #:

using Microsoft.Office.Core;
using Microsoft.Office.Interop.Word;

....

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

            object source = @"C:\Users\XYZ\Desktop\ScreenShot.doc";
            object target = @"C:\Users\XYZ\Desktop\ScreenShot.html";
            object unknown = Type.Missing;
            objWord.Documents.Open(ref source, ref unknown,
                 ref unknown, ref unknown, ref unknown,
                 ref unknown, ref unknown, ref unknown,
                 ref unknown, ref unknown, ref unknown,
                 ref unknown, ref unknown, ref unknown, ref unknown);

            object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatRTF;
            objWord.ActiveDocument.SaveAs(ref target, ref format,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown);

Я пытался найти в Google способ конвертировать .doc (даже .ppt) в формат .htm и всегда находил код, похожий на приведенный выше.

Но я продолжаю получать это исключение:

Получение фабрики классов COM для компонента с CLSID {000209FF-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

в строке:

Microsoft.Office.Interop.Word.Application objWord = новый Microsoft.Office.Interop.Word.Application ();

Это связано с тем, что у меня установлен Word Starter 2010, а не полный Office 2010, или есть какое-то другое решение?


person Jake    schedule 01.05.2011    source источник
comment
Не автоматизируйте Office на сервере.   -  person SLaks    schedule 01.05.2011
comment
@SLaks: Объясните, пожалуйста ... спасибо.   -  person Jake    schedule 01.05.2011
comment
support.microsoft.com/kb/257757   -  person SLaks    schedule 01.05.2011
comment
@SLacks: Я даже пробовал этот код в простом консольном приложении C #; У меня все еще есть исключение.   -  person Jake    schedule 01.05.2011
comment
В некоторой степени связано: stackoverflow .com / questions / 3967191 /   -  person robi-y    schedule 01.05.2011
comment
@SLacks: Проект, над которым я работаю, позволяет мне использовать только функции .NET, есть ли другое решение? Уверен, что эта проблема не связана с версией Microsoft Office, установленной на машине?   -  person Jake    schedule 01.05.2011


Ответы (2)


Использование COM-объектов из MS Office на стороне сервера - не лучшая идея. Первая проблема техническая - есть несколько подводных камней с процессами (например, иногда excel / word не закрывается после вызова Quit ()). Это непросто, но разрешимо.

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

Существует несколько библиотек, которые могут открывать (сохранять, конвертировать и т. Д.) Форматы MS Office без установки MS Office. Однажды я работал с Aspose библиотека, но есть и другие.

person TcKs    schedule 01.05.2011

Вы получили это исключение, поскольку COM-объект не настроен для разрешения запуска и доступа для удостоверения пользователя aspnet. Лучше изменить пользователя Application Pool Identity на «Network Service», у которого достаточно разрешений для выполнения компонентов COM +.

Для получения дополнительной информации проверьте это

person Ahmed Atia    schedule 01.05.2011
comment
Не могли бы вы объяснить, как изменяется идентификатор пула приложений? - person Jake; 01.05.2011
comment
Из «Выполнить» - ›введите inetmgr, откроется диспетчер IIS, выберите пул приложений, который прикреплен к вашему веб-сайту, затем в меню« Действия »выберите« Дополнительные настройки », затем смените пользователя с помощью параметра« Удостоверение ». - person Ahmed Atia; 01.05.2011