Как я могу выбрать текст в другом приложении с Java.awt.robot (пример: Shift + Home)

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать Java.awt.robot, чтобы исправить некоторые массивы Excel для меня автоматически. Для этого мне нужно выбрать текст внутри клетки. Похоже, что Shift + Home и Shift + клавиши со стрелками не работают для выбора текста. Вот фрагмент кода:

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

public class Fix4DArray {

public static void main(String[] args){
    int n = 10; //nominal sleep time
    try {
        Robot r = new Robot();
        Sequence(r,n,KeyEvent.VK_ALT,KeyEvent.VK_TAB); //switch windows to Excel
        Thread.sleep(200);
        Press(r,n,KeyEvent.VK_F2); //Open Excel editing for currently selected cell
        Select(r,n,KeyEvent.VK_SHIFT,KeyEvent.VK_HOME); //Select all text in cell DOES NOT WORK
        //Select(r,n,KeyEvent.VK_SHIFT,KeyEvent.VK_LEFT); //Select one character DOES NOT WORK
    }       
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}



public static void Press(Robot r,int sleep, int keyEvent) throws InterruptedException{
    r.keyPress(keyEvent);
    r.keyRelease(keyEvent);
    Thread.sleep(sleep);
}

public static void Select(Robot r, int sleep, int... keyEvents ) throws InterruptedException{
    r.keyPress(keyEvents[0]);       
    for(int i = 1; i < keyEvents.length; i++){
        r.keyPress(keyEvents[i]);
        Thread.sleep(sleep);
    }
    r.keyRelease(keyEvents[0]);

}

public static void Sequence(Robot r, int sleep, int... keyEvents ) throws InterruptedException{
    for(int i = 0; i < keyEvents.length; i++){
        r.keyPress(keyEvents[i]);
        Thread.sleep(sleep);
    }
    for(int i = keyEvents.length; i > 0 ; i--){
        r.keyRelease(keyEvents[i-1]);
        Thread.sleep(sleep);
    }
}
}
.

Обратите внимание, что если вы прокомментируете вкладку Alt + (Line 12) в начале и запущении от Eclipse (или другой IDE), он будет не выбирать текст в Eclipse, хотя он будет Переместите курсор. Ctrl-A Работает , но не выберет текст в Excel, поэтому o a no-go.

Я нашел одну ссылку здесь https://community.oracle.com/thread / 1289981? Start= 0 & tstart= 0 Об этом теме, но они не пришли к решению.

Любая помощь была бы очень ценится. Или другое решение для выбора текста в Excel. Обратите внимание, что VBA и Macros также не работают для конкретной задачи, которую я пытаюсь.

спасибо.

Обновление, используя совет от сезамена, я смог получить текст удален. Теперь я хочу выбрать ячейки, используя Shift + Arrow или какую-то работу. Вот обновленный фрагмент кода; Обратите внимание на линию, которая не работает:

        Robot r = new Robot();
        Sequence(r,n,KeyEvent.VK_ALT,KeyEvent.VK_TAB); //switch windows to Excel
        Thread.sleep(200);
        Press(r,n,KeyEvent.VK_SPACE); //replace text with space
        Select(r,n,KeyEvent.VK_CONTROL,KeyEvent.VK_Z); //UNDO to select text in cell
        Select(r,n,KeyEvent.VK_CONTROL,KeyEvent.VK_X); //CUT
        Sequence(r,n,KeyEvent.VK_CONTROL,KeyEvent.VK_SHIFT, KeyEvent.VK_ENTER); //Delete the array
        Select(r,n,KeyEvent.VK_SHIFT,KeyEvent.VK_RIGHT,KeyEvent.VK_RIGHT,KeyEvent.VK_RIGHT); //Select cells DOES NOT WORK
        Press(r,n,KeyEvent.VK_F2); //Open cell combination for typing array
        Sequence(r,n,KeyEvent.VK_CONTROL,KeyEvent.VK_SHIFT, KeyEvent.VK_ENTER); //Input the array
.

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

Решение

Навигация к ячейке и нажатием SPACE , затем CTRL + Z (UNDO) Выбирает текст в этой ячейке.В основном это очищает площадь, и когда вы отмените четкий, текст выбран.Это уродливо, но если это все, что вам нужно, я полагаю, что это может работать.

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