Come posso selezionare il testo in un'altra applicazione con java.awt.robot (esempio:turno+casa)
Domanda
Sto cercando di utilizzare java.awt.robot per correggere automaticamente alcuni array di Excel.Per fare ciò, devo selezionare il testo all'interno di una cella.Sembra che i tasti Maiusc+Home e Maiusc+Freccia non funzionino per selezionare il testo.Ecco uno snippet di codice:
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);
}
}
}
Tieni presente che se commenti alt+tab (riga 12) all'inizio ed esegui da Eclipse (o un altro IDE), lo farà non seleziona il testo anche in Eclipse, anche se sposterà il cursore.CTRL-A funziona, ma non selezionerà il testo in Excel, quindi non è possibile.
Ho trovato un riferimento qui https://community.oracle.com/thread/1289981?start=0&tstart=0 su questo argomento, ma non sono giunti ad una soluzione.
Qualsiasi aiuto sarebbe molto apprezzato.O un'altra soluzione per selezionare il testo in Excel.Tieni presente che anche VBA e macro non funzionano per l'attività specifica che sto tentando.
Grazie.
AGGIORNAMENTO utilizzando i consigli di Sesame, sono riuscito a eliminare il testo.Ora voglio selezionare le celle utilizzando MAIUSC+freccia o qualche soluzione alternativa.Ecco uno snippet di codice aggiornato;notare la riga che non funziona:
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
Soluzione
Navigazione verso una cella e pressione spazio Poi ctrl+z (annulla) seleziona il testo in quella cella.Fondamentalmente cancella il quadrato e quando annulli la cancellazione, il testo viene selezionato.È brutto, ma se è tutto ciò di cui hai bisogno suppongo che potrebbe funzionare.