¿Cómo puedo seleccionar texto en otra aplicación con java.awt.robot (ejemplo: Shift + Home)
Pregunta
Estoy tratando de usar java.awt.robot para solucionar algunas matrices de Excel para mí automáticamente. Para hacerlo, necesito seleccionar el texto dentro de una celda. Parece que Shift + Home and Shift + Flow Teckys no funciona para seleccionar el texto. Aquí hay un fragmento de código:
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);
}
}
}
Tenga en cuenta que si comenta la pestaña Alt + (línea 12) al principio y se ejecuta desde Eclipse (u otro IDE), no se seleccionará seleccionar el texto en Eclipse, aunque Mueve el cursor. CTRL-A funciona , pero no seleccionará el texto en Excel, por lo que es un no-Go.
Encontré una referencia aquí https://community.oracle.com/thread / 1289981? Inicio= 0 & tstart= 0 sobre este tema, pero no llegaron a una solución.
Cualquier ayuda sería muy apreciada. U otra solución para seleccionar el texto en Excel. Tenga en cuenta que VBA y Macros tampoco funcionan para la tarea específica que estoy intentando.
gracias.
Actualización Con el consejo de SESAME, pude eliminar el texto. Ahora quiero seleccionar celdas usando Mayús + flecha o algo de trabajo. Aquí hay un fragmento de código actualizado; Tenga en cuenta la línea que no funciona:
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
Solución
Navegación a una celda y presionando espacio luego ctrl + z (deshacer) selecciona el texto en esa celda.Básicamente, se aclara la plaza y cuando deshaga el claro, se selecciona el texto.Es feo, pero si eso es todo lo que necesitas, supongo que podría funcionar.