Отключить всплывающее окно «Отладка / Завершение Excel» или переменную Read Excel из проекта c # - PullRequest
0 голосов
/ 04 марта 2019

У меня есть метод взаимодействия C #, который открывает файл Excel, запускает макрос, сохраняет и закрывает его.

    private void DoExcelMacro(string fileName, string macroName)
    {
        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook workbook;
        workbook = excel.Workbooks.Open(fileName);
        excel.DisplayAlerts = false;

        excel.Run(macroName);
        Worksheet ws = workbook.ActiveSheet;

        workbook.SaveAs(fileName);
        excel.DisplayAlerts = true;

        ws = null;
        workbook.Close();
        workbook = null;
        excel = null;

        GC.Collect();
    }

Он отлично работает, если в макросе нет ошибок, например:

    Public Sub MacroEntry()
    Dim test AS Integer
        test = "A"
    End Sub

Отключение DisplayAlerts не работает.Если я нажимаю «Конец» во всплывающем окне, я получаю сообщение об ошибке в своем приложении на C #.

Вопрос 1: Есть ли способ подавить всплывающее окно с ошибкой, но пусть ошибка падает доприложение C #?

Или

Я могу изменить макрос Excel, чтобы поймать ошибку

    Public macroError As ErrObject

    Public Sub MacroEntry()
    On Error GoTo ErrorHandler
    Dim test As Integer
        test = "A"

    ErrorHandler:
        Set macroError = Err
        Exit Sub
    End Sub

Вопрос 2: Как прочитатьПеременная Excel macroError из объекта взаимодействия C #?

Я бы предпочел решение вопроса 1, если это возможно.

1 Ответ

0 голосов
/ 04 марта 2019

Если вы запускаете макрос, который обычно является Sub (возврат void), затем переходите в функцию (happy-path возвращает строку ""), но с перехватом ошибки вы можете проверить в C # непустая строка.

Public Function MacroEntry() As String
On Error GoTo ErrorHandler
    Dim test As Integer
    test = "A"

    Exit Function
ErrorHandler:
    MacroEntry= Err.Description
    Exit Function
End Function

C #:

string macroErrorReturn = excel.Run(macroName).ToString();
if (macroErrorReturn != "") {
    //error occurred in macro   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...