Как определить, находится ли приложение Excel в режиме редактирования ячеек?

StackOverflow https://stackoverflow.com/questions/221984

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пишу надстройку Excel, используя COM Interop из .net. У меня есть команда, которая открывает диалоговое окно, и из этого диалога я выполняю некоторую работу, например, собираю данные из используемого диапазона нескольких листов. Проблема в том, что если ячейка находится в режиме редактирования, некоторые вызовы, которые мне нужно сделать, будут вызывать исключения. Я хотел бы заранее определить, что Excel находится в режиме редактирования, чтобы я мог предупредить пользователя, чтобы он сначала закончил редактирование ячейки.

Есть идеи?

Это было полезно?

Решение

Существует свойство Application.Ready, которое должно предоставлять вам эту информацию, но на практике оно не работает надежно. См. здесь для получения информации о взломе.

Возможно, вы захотите посмотреть на настройку Application.Interactive = false, пока ваш код .net делает свое дело.

Другие советы

Попробуйте эту функцию:

    Function IsInEditMode(ByRef exapp As Excel.Application) As Boolean
        If exapp.Interactive = False Then
            Return False
        Else
            Try
                exapp.Interactive = False
                exapp.Interactive = True

                Return False
            Catch
                Return True
            End Try
        End If
    End Function

Вы не упомянули, какой язык вы используете. Функция SZL написана на VB. Так как я использую C #, мне пришлось конвертировать его. Работал отлично. Вот эквивалентный код C #.

    bool IsInEditMode(ref Microsoft.Office.Interop.Excel.Application exapp)
    {
        if (exapp.Interactive == false)
        {
            return false;
        }
        else
        {
            try
            {
                exapp.Interactive = false;
                exapp.Interactive = true;
                return false;
            }

            catch
            {
                return true;
            }
        }

    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top