POI 获取chekbox textbox (精准定位)
方式1:POI
方式2: xls
获取checkbox , 已经checkbox 的 label (如果shape name 读取时一直为空, 用wps 打开excel , 保存后在测试)
依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>
测试代码:
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.DataFormatter; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /***************************
*<pre>
* @Project Name : base-case-test-service
* @Package : com.sea.base.test
* @File Name : ReadExcelUFLCheckBox
* @Author : Sea
* @Mail : lshan523@163.com
* @Date : 2022/9/27 15:23
* @Purpose : 仅仅用于xls 文件
* @History :
*</pre>
***************************/
@Data
@Slf4j
@NoArgsConstructor
public class MyExcelReadUtil { // HashMap<String, Object> checkBoxResultMap = new HashMap<>(); //收集解析的checkbox
// HashMap<String, Object> activeXTextBoxMap = new HashMap<>(); //收集解析的 activeX Textbox
HashMap<String, Object> textBoxMap = new HashMap<>(); //收集解析的 textBoxMap private HSSFWorkbook workbook; public MyExcelReadUtil(InputStream excelInput) throws IOException {
// InputStream input = new FileInputStream("/home/sea/xx.xls");
POIFSFileSystem fs = new POIFSFileSystem(excelInput);
this.workbook= new HSSFWorkbook(fs);
} /**
* @param sheetIndex sheet编号 0,1,2
* @param checkBoxResultMap 收集解析的checkbox
* @param activeXTextBoxMap 收集解析的 activeX Textbox (name : byte[])
*/
public void readBoxAtSheet(int sheetIndex,HashMap<String, Object> checkBoxResultMap,HashMap<String, Object> activeXTextBoxMap){
try {
HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
log.info("sheet name : " + sheet.getSheetName());
HSSFPatriarch drawingPatriarch = sheet.getDrawingPatriarch(); //sheet.createDrawingPatriarch();
List<HSSFShape> childrenList= drawingPatriarch.getChildren();
int i =1;
for(HSSFShape shape: childrenList)
{
String shapeName = shape.getShapeName();
log.info("+++++++++++++++++++++ " +(i++) +" " +shapeName+" +++++++++++++^+++++++++++++");
if (shape instanceof HSSFTextbox) //普通文本框
{
log.info("+++++++++ HSSFTextbox ++++++++++"+shape.getShapeName());
HSSFTextbox textbox = (HSSFTextbox)shape;
HSSFRichTextString richString = textbox.getString();
String str = richString.getString();
log.info("文本框内容: " + str);
textBoxMap.put((shapeName+"").trim(),str);
} if (shape instanceof HSSFSimpleShape) // 复选框类
{
log.info("+++++++++ HSSFSimpleShape ++++++++++"+shape.getShapeName());
HSSFSimpleShape simpleShape = (HSSFSimpleShape)shape;
getCheckBox(simpleShape,checkBoxResultMap);
} if (shape instanceof HSSFObjectData) //图片已经其他插件
{
log.info("+++++++++ HSSFObjectData ++++++++++"+shape.getShapeName());
getActivexTextbox(shape,activeXTextBoxMap);
}
}
System.err.println(activeXTextBoxMap);
System.err.println(checkBoxResultMap);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* @param sheet
*/
public static void getAllData(HSSFSheet sheet)
{
int lastRowNum = sheet.getLastRowNum();
DataFormatter dataFormatter = new DataFormatter();
for(int row=0; row< lastRowNum; row++){
HSSFRow rowLine = sheet.getRow(row);
if(rowLine==null){continue;}
for(int cell=0; cell<=10;cell++){
if(rowLine.getCell(cell)!=null){
System.err.print(dataFormatter.formatCellValue(rowLine.getCell(cell)));
}
System.err.print(" ");
}
System.err.println(" ");
}
} /**
* @param sheet
* @param row
* @param column
* @return
*/
public static String getData(HSSFSheet sheet,int row, int column)
{
String s = new DataFormatter().formatCellValue(sheet.getRow(row-1).getCell(column-1));
return s;
} private void getActivexTextbox(HSSFShape shape, HashMap<String, Object> activeXTextBoxMap) throws Exception
{
String shapeName = shape.getShapeName() + "";
if(shapeName.contains("TextBox"))
{
HSSFObjectData objDataShape = (HSSFObjectData) shape;
//保存到本地
/* log.info("框名 "+shapeName);
String path = "/home/sea/CCCCCCCCCCC/AAAA_svn_new_AAAA/base-case-test-service/src/test/resources/" +shape.getShapeName().trim()+ ".emf";
System.err.println(path);
FileOutputStream fileOutputStream = new FileOutputStream(path);
fileOutputStream.write(objDataShape.getPictureData().getData());
fileOutputStream.close();*/
//name : byte[]
activeXTextBoxMap.put(shapeName,objDataShape.getPictureData().getData());
// activeXTextBoxMap.put(shapeName,path);
}
} private final static Pattern checkBoxReg = Pattern.compile("\\[sid=0x000A.+?\\[0(\\d),");
/**
* 获取复选框已经结果
* @param simpleShape
* @param checkBoxResult
* @throws Exception
*/
private void getCheckBox(HSSFSimpleShape simpleShape,HashMap<String, Object> checkBoxResult) throws Exception
{
if((simpleShape.getShapeName()+"").contains("Check Box"))
{
String simpleName = simpleShape.getShapeName();
log.info("复选框的内部名: "+ simpleName); // 复选框的内部名
log.info("复选框的标记: "+simpleShape.getString()); // 复选框的标记
Method getTextObjectRecord =simpleShape.getClass().getSuperclass().getDeclaredMethod("getObjRecord", null);
getTextObjectRecord.setAccessible(true);
Object textObjectRecord = getTextObjectRecord.invoke(simpleShape, null);
Matcher m = checkBoxReg.matcher(textObjectRecord.toString());
if (m.find())
{
String checkBit = m.group(1);
if (checkBit.length() == 1) {
boolean checked = "1".equals(checkBit);
System.out.println( simpleName+" " + checked+"-----------"+checkBit);
checkBoxResult.put(simpleName.trim(),checked);
}
}
}
} /**
* Sea test 2022-09-20 : OK
*/
// @Test
public void Test2(){
try {
InputStream input = new FileInputStream("/home/sea/CCCCCCCCCCC/AAAA_svn_new_AAAA/base-case-test-service/src/test/resources/EXHKG_SLI_Template.xls");
POIFSFileSystem fs = new POIFSFileSystem(input);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFPatriarch drawingPatriarch = sheet.getDrawingPatriarch(); //sheet.createDrawingPatriarch();
List<HSSFShape> childrenList= drawingPatriarch.getChildren();
HashMap<String, Object> checkBoxResultMap = new HashMap<>(); //收集解析的checkbox
HashMap<String, Object> activeXTextBoxMap = new HashMap<>(); //收集解析的 activeX Textbox
HashMap<String, Object> textBoxMap = new HashMap<>(); //收集解析的 textBoxMap
int i =1;
for(HSSFShape shape: childrenList)
{
String shapeName = shape.getShapeName();
System.err.println("+++++++++++++++++++++ " +(i++) +" " +shapeName+" +++++++++++++^+++++++++++++");
if (shape instanceof HSSFTextbox) //普通文本框
{
System.err.println("+++++++++ HSSFTextbox ++++++++++"+shape.getShapeName());
HSSFTextbox textbox = (HSSFTextbox)shape;
HSSFRichTextString richString = textbox.getString();
String str = richString.getString();
System.out.println("文本框内容: " + str);
textBoxMap.put((shapeName+"").trim(),str);
} if (shape instanceof HSSFSimpleShape) // 复选框类
{
System.err.println("+++++++++ HSSFSimpleShape ++++++++++"+shape.getShapeName());
HSSFSimpleShape simpleShape = (HSSFSimpleShape)shape;
System.err.println(simpleShape.getShapeName());
getCheckBox(simpleShape,checkBoxResultMap);
} if (shape instanceof HSSFObjectData) //图片已经其他插件
{
System.err.println("+++++++++ HSSFObjectData ++++++++++"+shape.getShapeName());
getActivexTextbox(shape,activeXTextBoxMap);
}
} System.err.println(activeXTextBoxMap);
System.err.println(checkBoxResultMap); } catch (Exception ex) {
ex.printStackTrace();
}
}
}
结果:[true, 男3, true, 男4, false, 男7, true, 男5, true, 男6, false, 男2, false, 男1]
方法2:(比较慢,不建议) 原文:https://zhuanlan.zhihu.com/p/518669270
通过Maven仓库下载导入,如下配置pom.xml:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls.free</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
示例:
import com.spire.xls.*;
import com.spire.xls.core.ICheckBox;
import com.spire.xls.core.IRadioButton;
import com.spire.xls.core.ISpinnerShape; public class GetFormControl {
public static void main(String[] args) {
//创建Workbook类的实例,加载Excel文档
Workbook wb = new Workbook();
wb.loadFromFile("AddControls.xlsx"); //获取第1张工作表
Worksheet sheet = wb.getWorksheets().get(0); //获取TextBox
String textbox = sheet.getTextBoxes().get(0).getText();
System.out.println(textbox); //获取Radio Button
for(int i = 0; i<sheet.getRadioButtons().getCount();i++)
{
IRadioButton radioButton = sheet.getRadioButtons().get(i);
String name = radioButton.getCheckState().name();
String text = radioButton.getText();
boolean islocked = radioButton.isLocked();
System.out.println(name + text + " 是否锁定:"+ islocked);
} //获取Combo Box控件中的选中的值(注:非列表中所有选项值)
String value = sheet.getComboBoxes().get(0).getSelectedValue();
System.out.println(value); //获取Checkbox
for(int z = 0;z< sheet.getCheckBoxes().getCount();z++)
{
ICheckBox checkBox = sheet.getCheckBoxes().get(z);
String text = checkBox.getText();
String name = checkBox.getCheckState().name();
String alternativetext = checkBox.getAlternativeText();
System.out.println(text + name + alternativetext);
} //获取SpinnerShape
for(int j = 0;j<sheet.getSpinnerShapes().getCount();j++)
{
ISpinnerShape spinnerShape = sheet.getSpinnerShapes().get(j);
String rangeAddress = spinnerShape.getLinkedCell().getRangeAddress();
int currentValue = spinnerShape.getCurrentValue();
System.out.println(rangeAddress + "\n" + currentValue);
} }
}
POI 获取chekbox textbox (精准定位)的更多相关文章
- 如何实现室内Wi-Fi无线终端的精准定位
如何实现室内Wi-Fi无线终端的精准定位 如何实现室内Wi-Fi无线终端的精准定位 随着商圈020的兴起,室内定位技术的也如百花争艳般不断涌现.但随着室内Wi-Fi网的架设普及,基于Wi-Fi定位技术 ...
- 获取客户端IP地址定位城市信息
获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...
- 利用POI获取Excel中图片和图片位置
利用POI获取Excel中图片和图片位置(支持excel2003or2007多sheet) 转自:http://blog.csdn.net/delongcpp/article/details/8833 ...
- AngularJS进阶(二十)HTML5实现获取地理位置信息并定位功能
HTML5实现获取地理位置信息并定位功能 注:请点击此处进行充电! 前言 这篇文章主要介绍了HTML5实现获取地理位置信息并定位功能,本文讲解了原生HTML5.百度地图.谷歌地图等三种获取理位置信息并 ...
- JAVA使用POI获取Excel的列数与行数
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介 ...
- html5实现获取地理位置信息并定位
这里主要讲h5实现获取地理位置信息并定位功能,本文讲解了原生h5,百度地图,谷歌地图等三种获取地理信息并定位的方法,需要的朋友可以参考下: h5提供了地理位置功能(Geolocation API),能 ...
- java_获取指定ip的定位
因为自己网站后台做了一个进站ip统计,之前只是获取了ip,这次优化了下,把ip的大致区域弄出来了 废话不多说,进正题 首先要用到几个网络大头的api 淘宝API:http://ip.taobao.co ...
- vue开发东京买菜,全栈项目,前端django,带手机GPS精准定位,带发票系统,带快递系统,带微信/支付宝/花呗/银行卡支付/带手机号一键登陆,等等
因为博客园不能发视频,所以,完整的视频,开发文档,源码,请向博主索取 完整视频+开发文档+源码,duanshuiLu.com下载 vue+django手机购物商城APP,带支付,带GPS精准定位用户, ...
- django开发东京买菜,全栈项目,前端vue,带手机GPS精准定位,带发票系统,带快递系统,带微信/支付宝/花呗/银行卡支付/带手机号一键登陆,等等
因为博客园不能发视频,所以,完整的视频,开发文档,源码,请向博主索取 完整视频+开发文档+源码,duanshuiLu.com下载 vue+django手机购物商城APP,带支付,带GPS精准定位用户, ...
- 利用wireshark任意获取qq好友IP实施精准定位
没事玩一把,感觉还挺有趣,首先打开wireshark: 不管你连接的什么网,如图我连接的是WLAN,双击进入如图界面: ctrl-f进行搜索:如图 选择分组详情,字符串,并输入020048.这时候你就 ...
随机推荐
- jmeter非GUI模式压测并生成测试报告
关于jmeter非GUI模式压测并生成测试报告 1.脚本调通后,在DOS命令栏进入脚本存在的位置 如果不想通过DOS进入脚本路径,则可以直接指定执行路径,命令如下: JMeter默认去当前目录寻找脚本 ...
- pytorch学习笔记(6)--神经网络非线性激活
如果神经元的输出是输入的线性函数,而线性函数之间的嵌套任然会得到线性函数.如果不加非线性函数处理,那么最终得到的仍然是线性函数.所以需要在神经网络中引入非线性激活函数. 常见的非线性激活函数主要包括S ...
- 解决通配符的匹配很全面, 但无法找到元素 'aop:config' 的声明
这是因为在applicationContext.xml文件中没有添加对应的地址 http://www.springframework.org/schema/aop http://www.springf ...
- centos7 七步教你安装搭建 LAMP 服务
先说说LAMP是什么 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写: Linux,操作系统 Apache,网页服务器 MariaDB或MySQL,数据库管理系统(或者数 ...
- UF_OBJ_delete_array_of_objects函数vector转数组用法
1 UF_initialize(); 2 std::vector<tag_t>tool_tag; 3 tag_t ObjectTag = NULL_TAG; 4 int Type, ...
- PHP开发支付时开启OPENSSL扩展
开发支付功能时,发现openssl类的方法都找不到,大概知道是没有扩展,在网上收集了PHP开启openssl扩展的方法. windows下开启方法: 1: 首先检查php.ini中:extension ...
- HTML——VSCODE配置笔记
# 使用VSCODE编辑前端代码 ### 1.问题一:无法根据!快速生成html标准代码 (1).首先看文件命名是否出错,即文件名后缀名.html (2).第一步没出错,就在新建文件的编辑状态下拨动C ...
- Jenkins启动失败的七个问题
1.jdk版本和路径问题(注意第6个问题) which java vim /etc/init.d/jenkins 2.用户名问题 查看/etc/sysconfig/jenkins的JENKINS_US ...
- 基础框架SSM导学
SSM Spring SpringMVC Maven高级 SpringBoot MybatisPlus spring官网:http://spring.io
- C#——》发布ASP.NET Core项目到Windows IIS服务器中环境部署
服务器:Windows Server2012 R2 IIS:8 .net Core版本:1.1.2 一,在VS中点击项目-->依赖项-->SDK下可以查看当前项目.Net core是哪个版 ...