Comment puis-je sélectionner du texte dans une autre application avec java.awt.robot (exemple: Maj + home)

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

  •  21-12-2019
  •  | 
  •  

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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top