Member 13290370 Ответов: 2

Создание экземпляра COM-компонента с CLSID {00024500-0000-0000-C000-000000000046} из iclassfactory не удалось из-за следующей ошибки: 8001010a Excel automation


Привет,

Я сталкиваюсь с той же проблемой с генерацией excel в windows server 2010. Есть ли у нас решение для этого? Я даже реализовал IMessagefilter, но он не сработал. Пожалуйста, может ли кто-нибудь помочь решить эту проблему?

Заранее спасибо

Создание экземпляра COM-компонента с CLSID {00024500-0000-0000-C000-000000000046} из IClassFactory не удалось из-за следующей ошибки: 8001010a.

Что я уже пробовал:

добавил thread. sleep и попытался преобразовать службу windows из mta в sta, но проблема все еще существует. Пожалуйста, дайте мне знать, как проверить, не является ли это проблемой конфигурации сервера.

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Проблема заключается в том, что вы используете офисное приложение в непользовательской интерактивной среде. Вы не можете использовать Office Interop в веб-приложениях или оконных службах. Если пользователь не вошел в консоль и не использует ваше приложение, Office Interop не может быть использован.

Проблема в том, что офисные приложения не поддерживают повторный вход. Это означает, что он не может обрабатывать несколько запросов одновременно.


Member 13290370

Да, автоматизация excel отлично работает в производственной среде. Мы работаем над внедрением новых изменений и развертыванием кода на тестовом сервере, мы сталкиваемся с этой проблемой. Связано ли это с конфигурацией сервера?

Dave Kreskowiak

МММ ... возможно, вы не читали мой пост. ТЫ НЕ МОЖЕШЬ ЭТОГО СДЕЛАТЬ. Конечно, сейчас это может сработать, но именно с этой проблемой вы сталкиваетесь при использовании Office Interop в веб-приложении. Он может и перестанет работать в любой момент.

Это не проблема конфигурации сервера. Это проблема "переписать код", чтобы удалить все зависимости от офисных приложений. В зависимости от того, что вы с ним делаете, вам, вероятно, сойдет с рук использование OpenXML SDK или ClosedXML SDK для выполнения вашей работы в Excel.

Dave Kreskowiak

Прочитай этот[^].

Richard Deeming

Используйте библиотеку, которая не полагается на автоматизацию Excel. Например:

* EPPlus[^];
* ClosedXML[^];
* SDK OpenXML[^];

Member 13290370

Как предложил Ричард, я использую ЭППЛУС. Но можете ли вы сказать мне, как получить доступ к макро excel vba в c# с помощью EPPLUS? Или скажите мне, каковы все другие способы доступа к макросам vba в c#. В основном я хочу получить входные параметры метода macro vba в соответствии с заданным именем метода. Я использовал Microsoft.vbe.interop(VBIDE) для доступа к компонентам vba, но получил 8001010a iclassfactory COM ошибки.

Dave Kreskowiak

Я понятия не имею, так как никогда не использовал EPPLUS и даже не поддерживал ли он доступ к коду VBA. Вот тут-то и пригодятся ваши исследовательские навыки.

Рейтинг:
1

KarstenK

COM иногда выходит в эфир, и вы должны придерживаться сообщения об ошибке. Мое лучшее предположение заключается в том, что у вас есть еще один экземпляр, работающий как описанный вот с МВП или какие-то проблемы с Антивирусный сканер Norton.

Посмотрите в диспетчере задач, чтобы убедиться, что ни один другой экземпляр Excel не запущен.

Почему ты этого не делаешь таким образом?


Member 13290370

Даже я пытался, Маршал.ReleaseComObject(workBook) тоже, но это тоже не помогло. Наконец, создан метод Killexcepprocess и убивает excels, если какой-либо процесс excel застрял из-за сбоя в создании отчета.
Что касается ошибки, то я согласен с тем, что ошибка говорит о том, что excel занят. Но мой вопрос таков
почему он занят?, и как я могу знать, что работает в задней части
земля?. дело в том, что в моем производственном компьютере приложение работает
идеальный. я думаю, что это вопрос какой-то конфигурации в
сервер (office excel, брандмауэр или антивирусное программное обеспечение) a
пожалуйста, любое предложение приветствуется