java excel 的某一行_Java 怎么去得到我点击的这个EXCLE空单元格的位置,显示某一行某一列,这种格式...

展开全部

java运行在虚拟机上,获取系统其他窗口比较麻烦。最好还是使用Excel的vba来实现。但是如果非要用java实现也32313133353236313431303231363533e58685e5aeb931333365646237可以

1: java和vbs,vba通信

2: JNA/JNI 调用win api来实现.

我使用了第二种方案,做了个简单的案例 .简单测试了excel2003和excel2013可以使用.其余版本没有测试.

(如果想要实现点击窗口时,java自动更新行列,那么还需要写较多的代码实现鼠标钩子,来响应点击事件,简单案例,就不去完善了)

a6af8f85be963e2b44246c13426ddb38.gif

使用工具spy++分析窗口句柄

583778c91ea93e3ada8e9215cb81555b.png

需要用到的包jna.jar , jna-platform.jar

核心代码//传入窗口标题 获取选中的行列

public static String getSelectCell(String title) {

int hwnd1 = MyUser32.INSTANCE.FindWindow("XLMAIN",title);

int hwnd2 = MyUser32.INSTANCE.FindWindowEx(hwnd1, null, "EXCEL;", null);

int hwnd3 = MyUser32.INSTANCE.FindWindowEx(hwnd2, null, "ComboBox", null);

int hwnd4 = MyUser32.INSTANCE.FindWindowEx(hwnd3, null, "Edit", null);

Mouse.click(hwnd4, 5, 5);//单机编辑框Edit

//try {

//Thread.sleep(100); // 单击后,如果不暂停下, 那么编辑框的文字变化时,可能会取到0

//} catch (InterruptedException e) {

//e.printStackTrace();

//}

if (hwnd4 != 0) { // 等于0就是没找到

int len = MyUser32.INSTANCE.SendMessage(hwnd4, 14, 0, 0);

char[] cs = new char[255];

MyUser32.INSTANCE.SendMessage(hwnd4, 13, len + 1, cs);

MyUser32.INSTANCE.SendMessage(hwnd4, 177, 0, 0);// 因为单击后,文字会选中,那么设置不选中文字

return new String(cs, 0, len);//返回行列,

} else {

return "";

}

}

通过上面的方法获得行列,比如获得了AB23 ,进过正则表达式获取字母部分就是列, 其余部分就是行.

win api还在了解中,请轻拍.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值