方式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 (精准定位)的更多相关文章

  1. 如何实现室内Wi-Fi无线终端的精准定位

    如何实现室内Wi-Fi无线终端的精准定位 如何实现室内Wi-Fi无线终端的精准定位 随着商圈020的兴起,室内定位技术的也如百花争艳般不断涌现.但随着室内Wi-Fi网的架设普及,基于Wi-Fi定位技术 ...

  2. 获取客户端IP地址定位城市信息

    获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...

  3. 利用POI获取Excel中图片和图片位置

    利用POI获取Excel中图片和图片位置(支持excel2003or2007多sheet) 转自:http://blog.csdn.net/delongcpp/article/details/8833 ...

  4. AngularJS进阶(二十)HTML5实现获取地理位置信息并定位功能

    HTML5实现获取地理位置信息并定位功能 注:请点击此处进行充电! 前言 这篇文章主要介绍了HTML5实现获取地理位置信息并定位功能,本文讲解了原生HTML5.百度地图.谷歌地图等三种获取理位置信息并 ...

  5. JAVA使用POI获取Excel的列数与行数

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介 ...

  6. html5实现获取地理位置信息并定位

    这里主要讲h5实现获取地理位置信息并定位功能,本文讲解了原生h5,百度地图,谷歌地图等三种获取地理信息并定位的方法,需要的朋友可以参考下: h5提供了地理位置功能(Geolocation API),能 ...

  7. java_获取指定ip的定位

    因为自己网站后台做了一个进站ip统计,之前只是获取了ip,这次优化了下,把ip的大致区域弄出来了 废话不多说,进正题 首先要用到几个网络大头的api 淘宝API:http://ip.taobao.co ...

  8. vue开发东京买菜,全栈项目,前端django,带手机GPS精准定位,带发票系统,带快递系统,带微信/支付宝/花呗/银行卡支付/带手机号一键登陆,等等

    因为博客园不能发视频,所以,完整的视频,开发文档,源码,请向博主索取 完整视频+开发文档+源码,duanshuiLu.com下载 vue+django手机购物商城APP,带支付,带GPS精准定位用户, ...

  9. django开发东京买菜,全栈项目,前端vue,带手机GPS精准定位,带发票系统,带快递系统,带微信/支付宝/花呗/银行卡支付/带手机号一键登陆,等等

    因为博客园不能发视频,所以,完整的视频,开发文档,源码,请向博主索取 完整视频+开发文档+源码,duanshuiLu.com下载 vue+django手机购物商城APP,带支付,带GPS精准定位用户, ...

  10. 利用wireshark任意获取qq好友IP实施精准定位

    没事玩一把,感觉还挺有趣,首先打开wireshark: 不管你连接的什么网,如图我连接的是WLAN,双击进入如图界面: ctrl-f进行搜索:如图 选择分组详情,字符串,并输入020048.这时候你就 ...

随机推荐

  1. C# IOC 个人理解

    学习QFramework 过程中发现对IOC不太了解,就大概百度了一下思路 将原先类与类之间的相互依赖关系,转移到第三方容器中, 同过读取配置文件来生成对应的依赖关系,将原本类之间的耦合转移到配置文件 ...

  2. Unity 使用JIMO 做MR扫图(Vuforia) 优化

    最近在做一个用MR眼镜端扫描图片做定位用, 使用的Vuforia提供的图片识别功能. 在眼镜端因为摄像机很挫,导致扫描出来的图片 位置存在着一定的偏差.就做了个小优化. 1.扫图的角度设定,垂直于图片 ...

  3. 网络服务之DHCP与FTP

    目录 DHCP 一.DHCP是什么? 二.DHCP的优点 三.DHCP的分配过程 四.DHCP的工作原理 五.DHCP动态获取实验 FTP 一.FTP是什么? 二.FTP的数据连接模式 三.svftp ...

  4. idea常用快捷键记录

    实用编写代码辅助快捷键 Ctrl+Alt+V 提出选中内容为局部变量 Ctrl+Backspace 按单词删除 Ctrl+D 复制行 Ctrl+Y 删除当前行 Ctr+Shift+U 大小写转化 Sh ...

  5. js 正则表达式与 python正则表达式

    修饰符 1.js i g m i 忽视大小写g 执行全局匹配(查找所有匹配,而非找到第一个匹配后停止)m 执行多行匹配gi 全局匹配+忽略大小写 2.python re.Ire.IGNORECASE让 ...

  6. mysql零基础-3

    第17章_触发器 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的 ...

  7. #科技 #资讯 #生活 RTX 4080显卡在欧跌破建议零售价, 小鹏回应自研电池, Meta因泄漏超5亿用户资料被罚款 ,黑猫投诉开启2022“你我同心 反诈同行”系列活动,这就是今天的其它大新闻

    今天是2022年11月29日 十一月初六 现在是下午15:29 下面是今天的其他大新闻 #NEWS 1 #RTX 4080在欧跌破建议零售价 ( IT 之家 )据 PCGamesHardware 报道 ...

  8. CC2020 分享信息

    CC2020是鄙人第一次参与的国际计算教育报告.CC2020报告的特色是希望面向未来的教育能走近每一个教育的利益相关者,包括家长.学生.行业雇主.政府决策制定者和学术界人士.敬请各位从自己的身份角度对 ...

  9. 基于vue2.0创建vue项目

    一.安装node环境 1.下载地址为:https://nodejs.org/en/ 2.检查是否安装成功:如果输出版本号,说明我们安装node环境成功 3.为了提高我们的效率,可以使用淘宝的镜像:ht ...

  10. 基础篇:windows常用命令

    1. windows常用系统命令 cd [进入目录] dir [列出当前目录文件] echo + 打印内容 [打印命令] echo 123 > 1.txt [打印内容到文本] type + 文件 ...