Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java.awt.robot在另一个应用程序中选择文本(例如:shift+;home)_Java_Awtrobot - Fatal编程技术网

如何使用java.awt.robot在另一个应用程序中选择文本(例如:shift+;home)

如何使用java.awt.robot在另一个应用程序中选择文本(例如:shift+;home),java,awtrobot,Java,Awtrobot,我正在尝试使用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 s

我正在尝试使用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);
    }
}
}

导航到单元格并按空格键,然后按ctrl+z键(撤消)选择该单元格中的文本。基本上,它会清除方块,当您撤消清除时,文本被选中。它很难看,但如果你只需要这些,我想它可以工作。

这对选择单元格中的文本和剪切数组很有效。现在我需要在键入公式之前通过选择单元格来调整数组的大小,这意味着我需要再次按住shift键并向右移动。还有其他解决办法吗?(我希望阵列的大小为4个单元格)。我将在问题中添加一个更新的代码段。谢谢我不太明白什么不起作用。当我按你的按键时,它似乎能完美地选择四个单元格(就像你用鼠标一样)。然后ctrl+shift-enter分别应用于所有四个单元格。当我运行Robot时,shift+right移动光标而不是选择单元格。它在Eclipse中也做同样的事情(移动光标而不是选择字符)。我正在做另一项工作,通过创建一个带有快捷键的宏来选择单元格,但我真希望有一种方法可以使用java.awt.robot选择文本/单元格。谢谢我让它和工作环境一起工作。我希望我能选择机器人,但哦,好吧。再次感谢你的帮助。
        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