كيف يمكنني تحديد نص في تطبيق آخر باستخدام java.awt.robot (مثال:التحول + المنزل)

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

  •  21-12-2019
  •  | 
  •  

سؤال

أحاول استخدام java.awt.robot لإصلاح بعض صفائف Excel تلقائيًا.وللقيام بذلك، أحتاج إلى تحديد النص داخل الخلية.يبدو أن مفاتيح Shift+home وShift+Arrow لا تعمل لتحديد النص.فيما يلي مقتطف التعليمات البرمجية:

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);
    }
}
}

لاحظ أنه إذا قمت بالتعليق على alt+tab (السطر 12) في البداية وقمت بتشغيله من Eclipse (أو IDE آخر)، فسيتم ذلك لا حدد النص في Eclipse أيضًا، على الرغم من أنه سيحرك المؤشر.CTRL-A تعمل, ، ولكن لن يتم تحديد النص في Excel، لذا فهو أمر محظور.

لقد وجدت مرجعا واحدا هنا https://community.Oracle.com/thread/1289981?start=0&tstart=0 حول هذا الموضوع، لكنهم لم يتوصلوا إلى حل.

أي مساعدة سيكون موضع تقدير كبير.أو حل آخر لتحديد النص في Excel.لاحظ أن VBA ووحدات الماكرو لا تعمل أيضًا في المهمة المحددة التي أحاولها.

شكرًا.

تحديث باستخدام نصيحة Sesame، تمكنت من حذف النص.أريد الآن تحديد الخلايا باستخدام Shift+arrow أو بعض الحلول البديلة.فيما يلي مقتطف التعليمات البرمجية المحدث؛لاحظ السطر الذي لا يعمل:

        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
هل كانت مفيدة؟

المحلول

الانتقال إلى الخلية والضغط فضاء ثم السيطرة + ض (تراجع) يحدد النص الموجود في تلك الخلية.في الأساس، يقوم بمسح المربع وعندما تقوم بالتراجع عن المسح، يتم تحديد النص.إنه أمر قبيح، ولكن إذا كان هذا هو كل ما تحتاجه، أعتقد أنه يمكن أن ينجح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top