Проблемы с офисной автоматизацией в asp.net. Я могу использовать альтернативы, такие как open-office, если бы я знал, как - PullRequest
5 голосов
/ 16 апреля 2010

У меня есть веб-приложение ASP.NET 2.0, которое должно загрузить файл ppt, а затем извлечь его слайды в изображения. Для этого я импортировал сборки office.dll и Microsoft.Office.Interop.PowerPoint.dll и написал следующий код

public static int ExtractImages(string ppt, string targetPath, int width, int height)
    {
        var pptApplication = new ApplicationClass();

        var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);

        var slides = new List<string>();

        for (var i = 1; i <= pptPresentation.Slides.Count; i++)
        {
            var target = string.Format(targetPath, i);
            pptPresentation.Slides[i].Export(target, "jpg", width, height);
            slides.Add(new FileInfo(target).Name);
        }

        pptPresentation.Close();

        return slides.Count;
}

Если я запускаю этот код на своем локальном компьютере, в asp.net или исполняемом файле, он работает отлично. Но если я пытаюсь запустить его на рабочем сервере, я получаю следующую ошибку:

System.Runtime.InteropServices.COMException (0x80004005): PowerPoint не удалось открыть файл. в Microsoft.Office.Interop.PowerPoint.Presentations.Open (String FileName, MsoTriState ReadOnly, MsoTriState Без названия, MsoTriState WithWindow) в PPTImageExtractor.PptConversor.ExtractImages (String caminhoPpt, String caminhoDestino, Int32 largura, Int32 altura, String caminhoThumbs, Int32 larguraThumb, Int32 alturaThumb, Boolean geraXml) в Upload.ProcessRequest (контекст HttpContext)

Процесс запущен с пользователем NT AUTHORITY \ NETWORK SERVICE. IIS настроен на использование анонимной аутентификации. Анонимный пользователь - администратор, я настроил его так, чтобы приложение могло запускаться, не беспокоясь о разрешениях.

В моей машине для разработки у меня Office 2010 бета1. Я также проверил исполняемый файл на компьютере с Office 2007. И если я запускаю код из исполняемого файла на сервере с установленным офисом 2003, он работает отлично.

Чтобы не было никаких проблем с разрешениями, каждый на сервере имеет полный доступ к веб-сайту. Сайт работает в IIS7 и в классическом режиме.

Я также слышал, что у Open-office есть API, который должен это делать, но я ничего не мог найти по этому поводу. Я не возражаю против использования DLLImport для выполнения своих задач, и я могу установить open-office на веб-сервере. Не беспокойтесь о переписывании этого метода, пока параметры одинаковы, все будет работать.

Я ценю вашу помощь.

Ответы [ 6 ]

10 голосов
/ 19 мая 2010

Никогда не используйте Office Interop из приложения ASP.NET. См. Замечания по серверной автоматизации Office .

Однако, если у вас нет альтернативы, в Windows Server 2008 вам нужно создать следующие каталоги, чтобы заставить это работать:

Windows 2008 Server x64: C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop Windows 2008 Server x86: C: \ Windows \ System32 \ config \ systemprofile \ Desktop

1 голос
/ 04 июня 2014

В моей ситуации (преобразование презентации в видео, и у меня очень похожая проблема с открытым материалом) это помогает:

Создание следующих каталогов:

C: \ Windows \ SysWOW64 \ Config \ systemprofile \ Desktop

C: \ Windows \ System32 \ config \ systemprofile \ Desktop (у меня этого нет)

Моя операционная система Windows Server 2012 R2 Standard

1 голос
/ 17 апреля 2010

Рассматривая возможность использования Office Automation на сервере, вы можете прочитать информацию в следующей статье базы знаний.

http://support.microsoft.com/kb/257757

Ключевая фраза по ссылке выше

В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых необслуживаемых, неинтерактивных клиентских приложений или компонентов (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может работать нестабильно и / или зависать при работе Office в этой среде.

И я могу подтвердить, что вышесказанное очень верно, и не только MS пытается вас обескуражить ...

0 голосов
/ 02 декабря 2011

Никогда не используйте Office Interop из приложения ASP.NET. См. Замечания по серверной автоматизации Office .

Тем не менее, я просто хотел отметить, что мне пришлось сделать исправление, описанное Мурти Пэнтэмом, на 64-битной машине с Windows 7 Professional в Office 2010. Он не имел Windows 7 Service Pack 1 или Office 2010 с пакетом обновления 3 установлен. Таким образом, урок здесь заключается в том, что исправление не ограничивается Server 2008. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 16 апреля 2010

Я могу ошибаться, недавно начал искать подобные вещи. Но вам не нужно, чтобы на компьютере был установлен офис, чтобы создавать или редактировать офисные файлы 2007+. В основном это zip-файлы с другим расширением. Если вы переименуете его в .zip, вы увидите все файлы и сможете редактировать их напрямую.

Затем его можно распаковать, и все файлы для вас. Вы можете создавать новые файлы аналогичным образом

0 голосов
/ 16 апреля 2010

Библиотеки Interop требуют, чтобы соответствующее приложение было установлено на компьютере, с которого они работают. То есть, чтобы это работало на вашем производственном сервере, вам необходимо установить Office на этом сервере. Это вообще ужасная идея. Существует много проблем с типом установки, поскольку каждый раз, когда кто-то делает запрос, запускается новый экземпляр рассматриваемого приложения (в вашем случае PowerPoint).

Если вы хотите анализировать файлы PowerPoint на центральном сервере, вам следует использовать библиотеку, которая читает файлы PowerPoint. Я знаю, что Aspose делает такой продукт (Aspose.Slides), но есть и другие.

Если документы находятся в PowerPoint 2007, возможно, вы сможете проанализировать XML-файл Open Office на наличие нужных вам данных. См. Представление Office (2007) Форматы файлов Open XML и Open XML SDK 2.0 для Microsoft Office для получения дополнительной информации.

...