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 ...
随机推荐
- python中的变量和算数运算
先说下变量的作用: 用来保存数据,为什么要保存? 后面要使用. 变量的概念: 变量就是用来存储一些信息,供程序以后调用或者操作修改.变量为标记数据提供了一种描述性的名字,以便我们的程序可以被程序的阅读 ...
- js 学习记录(一)
前情提要: 本记录参照 <<javascript 入门导论>> 这本书学习
- Datatable数据转换成excel导出时 数值类型在EXCEL中为文本形式 无法进行统计
功能背景 有地税上以及各企业的一个缴费情况的比对,基于两表进行匹配查看数据是否在合理范围内,对比对完成表进行数值导出. 2.问题描述 匹配和生成匹配结果导出已成功完成,但是在数值列导出后变成了文本形式 ...
- abstract、virtual、sealed、 interface、struct 基础知识整理
abstract abstract 修饰符指示被修改内容的实现已丢失或不完整. abstract 修饰符可用于类.方法.属性.索引和事件. 在类声明中使用 abstract修饰符以指示某个类仅旨在作为 ...
- SpringBoot初体验及原理解析
一.前言 上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...
- 从零开始学 Web 之 BOM(四)client系列
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Shell脚本 | 健壮性测试之空指针检查
通过 "adb shell am start" 遍历安卓应用所有的 Activity,可以检查是否存在空指针的情况. 以下为梳理后的测试流程: 通过 apktool 反编译 apk ...
- Java 面试基础总结(一)
1.九种基本数据类型的大小以及它们的封装类 java提供的九种基本数据类型:boolean.byte(1).char(2).short(2).int(4).long(8).float(4).doubl ...
- Python 【web框架】之Flask
flask 是Python实现的轻量级web框架.没有表单,orm等,但扩展性很好.很多Python web开发者十分喜欢.本篇介绍flask的简单使用及其扩展. 文中示例源码已经传到github:h ...
- ProxySQL Cluster 高可用集群环境部署记录
ProxySQL在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是Proxy ...