Member 12766428 Ответов: 1

Как вызвать макрос из кода C#?


При вызове макроса в excel из кода c# я получаю это исключение System.Runtime.InteropServices.COMException (0x800A03EC): исключение из HRESULT: 0x800A03EC

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

Я использую Microsoft.Офис.Взаимодействие.Excel версии 15 и клиентская машина имеет Office 2000 , и при вызове макроса я получаю следующее исключение System.Runtime.InteropServices.COMException (0x800A03EC): исключение из HRESULT: 0x800A03EC.

Это код, который у меня есть трид.

private void RunMacro(Application xlApp, Workbook xlWB, string MacroName, out string status)
       {
           Worksheet xlWS;
           status = string.Empty;
           if (xlApp != null)
           {

               xlWS = (Excel.Worksheet)xlWB.Worksheets.get_Item("Sheet1");// .get_Item(paramsExcelOperatios.WorksheetNo);
               if (MacroName != String.Empty)
               {
                   xlWS.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, xlApp, new Object[] { MacroName });

               }
               else
               {
                   status = "Failure - Macro name should not be empty";
               }

           }
           else
           {
               status = "Failure - Worksheet name is not valid.";
           }
       }

lmoelleb

Разве это не Office 2013, который является версией 15? Таким образом, ваша офисная установка на машине слишком стара для используемой вами оболочки COM на 13 лет?

CHill60

Я предполагаю, что вы пытались запустить макрос из Excel?

Member 12766428

Я использовал этот синтаксис " xlWS.GetType().InvokeMember("Run", System.Отражение.Флаг bindingflags.По Умолчанию | Система.Отражение.Флаг bindingflags.InvokeMethod, null, xlApp, new Object[] { MacroName });" для вызова/выполнения макроса .

CHill60

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

Возможно, вы захотите сообщить своему "клиенту", что Office 2000 пронизан дырами в системе безопасности и не совместим с Windows 10 - его действительно следует обновить

Dave Kreskowiak

Ваш код написан против оболочки COM для более новой версии Office. Эта оболочка не будет работать должным образом против более старой версии Office.

Реальный вопрос заключается в том, почему вы хотите поддерживать такую старую версию Office?

1 Ответов

Рейтинг:
2

Maciej Los

Это плохая идея, плохой подход!

Все, что код VBA может сделать с объектами Excel, C# может сделать то же самое. Обратите внимание, что taht C# предлагает гораздо больше, чем VBA, например: Linq.


lmoelleb

Трудно сказать, не зная прецедента использования. Пользователи Excel также выполняют макрос? Предназначены ли макросы для написания людьми, которые знают Excel, но не имеют знаний для программирования C# - или даже доступа к системе разработки. Если они используют Office 2000, то это, вероятно, не самая прогрессивная среда, в которой это необходимо. :)