Как определить, находится ли приложение Excel в режиме редактирования ячеек?
-
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;
}
}
}