Я пытаюсь получить выделенный текст активной ячейки в Excel. Например:Получение выделенного текста в активной ячейке из Excel Interop
Cell F3 Значение:
Это строка.
Пользователь выбрал ячейку F3 и в строке формул или непосредственно в ячейке выбрал (выделить) 'is.'
Меня интересует выбор, «есть».
Excel Interop или VBA приемлемо.
Update:
После включения некоторых предложений, я пришел к следующему:
public void SelectionToLowerCase(Excel.Worksheet activeWorksheet)
{
activeWorksheet.Application.SendKeys("^c", true);
var text = Clipboard.GetText();
var replacement = text.ToLower();
Clipboard.SetText(replacement);
activeWorksheet.Application.SendKeys(replacement);
// potentitally, also:
// activeWorksheet.Application.SendKeys("^v");
}
Это, однако, не работает совсем правильно либо. Значение, возвращаемое с Clipboard.GetText()
, является тем, что было в буфере обмена до того, как был запущен метод. После выполнения буфер обмена содержит ожидаемое значение.
Моя оценка такова, что буфер ключей Excel, в котором метод Application.SendKeys()
отправляет свои аргументы, не обрабатывается до тех пор, пока элемент управления не вернется в Excel.
Кому-нибудь известно о способе обработки буфера нажатия клавиш Excel при выполнении кода? Application.KeyBuffer.Clear()
или некоторые такие? (Это не фактический метод или свойство)
Что я пробовал? Я не уверен, что это применимо здесь. Я спрашиваю, как обращаться с API в определенном порядке. Это не похоже на то, что у меня есть конкретный код или логическая проблема. Я не уверен, что вы искали. – Michael
Ну, короткий ответ - нет, потому что VBA не будет запускаться после входа в режим редактирования в ячейке. То же самое с Interop. – Sorceri
Это явно ложно. Просто проверено. Выберите ячейку, нажмите F2 и нажмите на одну из моих собственных ленточных кнопок. Выполненный код, каретка все еще находится в ячейке. – Michael