Comment puis-je sélectionner du texte dans une autre application avec java.awt.robot (exemple: Maj + home)
Question
J'essaie d'utiliser java.awt.robot pour réparer des tableaux Excel pour moi automatiquement. Pour ce faire, je dois sélectionner le texte à l'intérieur d'une cellule. Il semble que Maj + home and Shift + flèche ne fonctionne pas pour sélectionner du texte. Voici un extrait de code:
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);
}
}
}
Notez que si vous commencez l'onglet Alt + (ligne 12) au début et exécuté à partir de Eclipse (ou d'un autre IDE), il sera pas Sélectionnez le texte dans Eclipse, bien qu'il soit Déplacez le curseur. CTRL-A fonctionne , mais ne sélectionnera pas le texte dans Excel, donc c'est un non-go.
J'ai trouvé une référence ici https://community.oracle.com/thread / 1289981? START= 0 & AMP; TSTART= 0 à propos de ce sujet, mais ils ne sont pas venus à une solution.
Toute aide serait grandement appréciée. Ou une autre solution pour sélectionner le texte dans Excel. Notez que VBA et les macros ne fonctionnent pas non plus pour la tâche spécifique que je tente.
merci.
Mise à jour en utilisant le conseil de Sesame, j'ai pu obtenir le texte supprimé. Maintenant, je souhaite sélectionner des cellules à l'aide de Shift + Flèche ou de travail. Voici un extrait de code mis à jour; Notez la ligne qui ne fonctionne pas:
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
La solution
Naviguer vers une cellule et appuyer sur Espace Ctrl + Z (Annuler) sélectionne le texte dans cette cellule.Fondamentalement, il efface le carré et lorsque vous annulez le claire, le texte est sélectionné.C'est moche, mais si c'est tout ce dont vous avez besoin, je suppose que cela pourrait fonctionner.