Java 获取表格中某一个单元格的值
需求
搜索页面返回表格样搜索结果, 获取搜索结果中某个单元格的具体值.
以下图为例, 下表是搜索返回的结果, 第一行是各个列的名字, 其它是具体的返回值.

方法1:
根据用户输入的表头名来确定是第几列, 再根据用户输入的行数锁定单元格.
package com.thanos.ebony2;
import static com.thanos.ebony2.bean.AntFormBrowser.BROWSER;
import com.thanos.ebony2.exception.NoSuchRow; import java.util.ArrayList;
import java.util.List; import org.openqa.selenium.By;
import org.openqa.selenium.WebElement; import com.thanos.ebony2.bean.AntProp; @SuppressWarnings(value = {"unchecked", "rawtypes"})
public class Test {
public static void main(String[] args) { //测试代码
BROWSER.open(AntProp.getProp("XXXURL"));
BROWSER.pause(1);
BROWSER.click("//*[@id=\"abc\"]/div/div/form/div[2]/div/div/div/span/div[1]/button");
BROWSER.pause(1);
System.out.println(getRowNo());
System.out.println(getColNo());
String a = getCell("A", 10); // 取A列第10行的值
System.out.println("cellValue a: " + a);
String b = getCell("G", 11); // 取G列第11行的值
System.out.println("cellValue b: " + b);
} /*
* 参数: 列名 String tabName; 行数 int rowNo
* 返回值: 某一个格子的值
*/ public static String getCell(String colName, int rowNo) {
int totalRow = getRowNo();
if (rowNo < 1) {
throw new NoSuchRow(String.format("row [%s]", rowNo));
} else if(rowNo > totalRow) {
throw new NoSuchRow(String.format("There's %s rows, your input %s is not reachable", totalRow, rowNo));
} List<WebElement> temp = BROWSER.getWebDriver().findElements(By.tagName("tr"));
List<WebElement> currentRow = temp.subList(1, temp.size()-1); //去掉表头那一行
String[] rowData = currentRow.get(rowNo-1).getText().split(" "); //注: 因第一行是表头(列名), 所以取单元格值时表头不计入rowNo. 即: rowNo传入1时所取的值是表头下面第一行的值.
List<WebElement> tags = BROWSER.getWebDriver().findElements(By.tagName("th"));
List<String> tagNames = new ArrayList();
for (WebElement ele : tags) {
String name = ele.getText();
tagNames.add(name);
}
// Float cellValue = 0f;
String cellValue = "";
int index = tagNames.indexOf(colName);
// cellValue = Float.parseFloat(rowData[index]);
cellValue = rowData[index];
return cellValue; } public static int getColNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("th"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size();
} public static int getRowNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("tr"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size()-1;
} }
表头名 + 行数
方法2:
用两层循环把每一个单元格放入二维数组, 再根据用户输入的行数和列数定位单元格并取值.
package com.thanos.ebony2;
import static com.thanos.ebony2.bean.AntFormBrowser.BROWSER;
import com.thanos.ebony2.exception.NoSuchRow; import java.util.ArrayList;
import java.util.List; import org.openqa.selenium.By;
import org.openqa.selenium.WebElement; import com.thanos.ebony2.bean.AntProp; @SuppressWarnings(value = {"unchecked", "rawtypes"})
public class Test {
public static void main(String[] args) { //测试代码
BROWSER.open(AntProp.getProp("XXXURL"));
BROWSER.pause(1);
BROWSER.click("//*[@id=\"abc\"]/div/div/form/div[2]/div/div/div/span/div[1]/button");
BROWSER.pause(1);
System.out.println(getRowNo());
System.out.println(getColNo());
String b = getCellValue(10, 1); //取第10行第1列的值
System.out.println("cellValue b: " + b);
} /*
* 参数: 列 int colNo, 行 int rowNo
* 返回值: 某一个格子的值
*/ public static String getCellValue(int colNo, int rowNo) {
List<WebElement> tempR = BROWSER.getWebDriver().findElements(By.tagName("tr"));
List<WebElement> tempRow = tempR.subList(1, tempR.size()-1); //去掉表头(表头不计入行数)
int totalRow = getRowNo();
int totalCol = getColNo();
Object[][] table = new Object[totalRow][totalCol];
for (int i = 0; i < tempRow.size(); i++) {
List<WebElement> currCol = tempRow.get(i).findElements(By.tagName("td"));
for (int j = 0; j < currCol.size(); j++) {
table[i][j] = currCol.get(j).getText();
}
} return (String) table[colNo-1][rowNo-1]; //返回单元格的值
} public static int getColNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("th"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size();
} public static int getRowNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("tr"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size()-1;
} }
行数 + 列数
Java 获取表格中某一个单元格的值的更多相关文章
- Excel表格中单击一个单元格如何将整行整列变色
视图->阅读模式 开启阅读模式后 就会显示如下情景,是的你点击任意单元格后,显示整行/整列
- C# 获取Excel中的合并单元格
C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
Visual Studio 2017中使用正则修改部分内容 最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...
- Devexpress Winform Gridcontrol 中根据条件单元格的值改变单元格的颜色等属性。
提供一下三种方法 1.使用设计器 点击gridcontrol控件,run designer,format Condtions, add,然后进行各种条件的设置. 2.用代码代替设计器. 实例代码: p ...
- java poi给sheet表格中的某个单元格添加批注
Label l = , , "A cell with a comment"); WritableCellFeatures cellFeatures = new WritableCe ...
- html 让table表格中的td单元格内容过长显示为固定长度,多余部分用省略号代替?
<th class="wrap">商品名</th> .wrap{ width: 150px; //设置需要固定的宽度 white-space: nowrap ...
- jquery遍历table为每一个单元格取值及赋值
表格代码 <tr> <td> <input type="text" style="border: none; text-align: cen ...
- DbGridEh 一个单元格的值改变时另一单元格的值随之改变
你可以为每个字段设置OnSetText事件,这样在输入完后回车会移动时就会触发,或者在adoquery的beforepost中或afterpost中都可以grid也提供了一些事件,也可以在某些条件下做 ...
- table里面,怎么根据checkbox选择的一行中的某个单元格的值是否为空,来判断是否该选中
<table class="stripe" id="tab2"> <tr> <th>选择</th> <th ...
随机推荐
- RPC的原理总结
一.RPC的引入 早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来.假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进程都写一个画图的功能.这不是整人么?于 ...
- css回归测试工具:backstopjs
最近在看公开课,一位老师讲了一个自动化的工具,backstopjs,可以自动的对比UI出的图与前端写好的图,不一致的地方会标出,挺好用的,但是写的过程中也会遇到一些问题,现在写出来,记录一下 首先,要 ...
- 监督学习Supervised Learning
In supervised learning, we are given a data set and already know what our correct output should look ...
- mysql的binlog进行数据恢复
什么是binlog? binlog,也称为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中,可以用来查看数据库的变更历史(具体的时间点所有的SQL操作).数据库增量备 ...
- .net core通过发布nuget实现引用项目
1 获取 api key 登录 https://www.nuget.org/account 进行api key获取操作 2 安装 nuget package explorer 3 进入要发布的项目目 ...
- Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...
- 基于 JDK 的动态代理机制
『动态代理』其实源于设计模式中的代理模式,而代理模式就是使用代理对象完成用户请求,屏蔽用户对真实对象的访问. 举个最简单的例子,比如我们想要「FQ」访问国外网站,因为我们并没有墙掉所有国外的 IP,所 ...
- 一张图读懂PBN旁切转弯计算
当DOC8168进入PBN章节以后,所有的保护区不再标注风螺旋的字母位置点.似乎ICAO已经有了精确计算的方法,只是没有告诉我们.沿着风螺旋的轨迹一路走来,切线与角度的换算方法想必已经相当熟悉了吧,这 ...
- rsync算法原理和工作流程分析
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释.本文不会介绍如何使用rsync命令(见rsync基本用法),而是详细解释它如何实现高效的增 ...
- Asp.net中GridView详解《转》
ASP.NET服务器控件GridView 1 ASP.NET 服务器控件GridView使用 本教程不介绍服务器端控件的呈现,事件处理,状态等理论知识,只介绍服务器端控件的使用操作,如 ...