كيف يمكنني تحديد نص في تطبيق آخر باستخدام java.awt.robot (مثال:التحول + المنزل)
سؤال
أحاول استخدام 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
المحلول
الانتقال إلى الخلية والضغط فضاء ثم السيطرة + ض (تراجع) يحدد النص الموجود في تلك الخلية.في الأساس، يقوم بمسح المربع وعندما تقوم بالتراجع عن المسح، يتم تحديد النص.إنه أمر قبيح، ولكن إذا كان هذا هو كل ما تحتاجه، أعتقد أنه يمكن أن ينجح.