POI如何解析出excel 中复选框是否被选中
1.问题描述
将excel 文件中的数据,解析存入系统是企业开发中,常见的功能,利用poi可以很容易的解析出excel中数据,但是excel文件中,如果存在复选框,那么获取复选框的状态,就是一件很麻烦的事情。
2. 解决思路
1 模板可以自己定义
如果模板可以自己定义,那么问题就变得很简单,我们只需要将每个复选框和指定的一些单元格关联起来,如果复选框被选中,那么与它关联的单元格的值变为TRUE,如果取消选中,那么与它关联的单元格的值变为FALSE,然后我们偷偷将这些单元中的内容隐藏起来,在后台我们就可以像获取普通单元格中的内容一样,获取复选框中的内容。
1 选择复选框,选择设置对象格式
2 在弹出框中找到控制,找到单元格连接
3 单击如图所示的按钮,指定关联的单元格,
4 指定关联的单元格
5 确定即可
6 测试
选中状态
取消选中状态
2 模板已经指定,不能在修改
如下图,已经积累了多年的数据,但是都是如下图所示的模板,利用思路1的方式去解决,显然不现实
解决方法参考的是 http://www.it1352.com/219801.html 中的代码,请前辈收下 我的膝盖和我的三鞠躬,一鞠躬,二鞠躬,三鞠躬!!!。
解决方法参考的是 http://www.it1352.com/219801.html 中的代码,请前辈收下 我的膝盖和我的三鞠躬,一鞠躬,二鞠躬,三鞠躬!!!。
解决方法参考的是 http://www.it1352.com/219801.html 中的代码,请前辈收下 我的膝盖和我的三鞠躬,一鞠躬,二鞠躬,三鞠躬!!!。
废话不多,直接上代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
import org.apache.poi.hssf.record.ObjRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SubRecord;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
public class App {
private static final String path = "C:\\Users\\Administrator\\Desktop\\济南悦明商贸-自定义.xls";
private static final String Workbook = "Workbook";
private static void readExcelfile() {
FileInputStream file = null;
try {
file = new FileInputStream(new File(path));
// Get the workbook instance for XLS file
HSSFWorkbook workbook = new HSSFWorkbook(file);
// Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheetAt(0);
// Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// For each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t\t");
break;
}
}
System.out.println();
}
// file.close();
// FileOutputStream out = new FileOutputStream(
// new File(path));
// workbook.write(out);
// out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (file != null)
file.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
private static void readCheckbox() {
FileInputStream file = null;
InputStream istream = null;
try {
file = new FileInputStream(new File(path));
POIFSFileSystem poifs = new POIFSFileSystem(file);
istream = poifs.createDocumentInputStream(Workbook);
HSSFRequest req = new HSSFRequest();
req.addListenerForAllRecords(new EventExample());
HSSFEventFactory factory = new HSSFEventFactory();
factory.processEvents(req, istream);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (file != null)
file.close();
if (istream != null)
istream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
System.out.println("ReadExcelFile");
readExcelfile();
System.out.println("ReadCheckbox");
readCheckbox();
}
}
class EventExample implements HSSFListener {
public void processRecord(Record record) {
// System.out.println(record.getSid()+"----"+record);
// System.out.println(ObjRecord.sid);
switch (record.getSid()) {
case ObjRecord.sid:
ObjRecord objRec = (ObjRecord) record;
// System.out.println(record);
List<SubRecord> subRecords = objRec.getSubRecords();
for (SubRecord subRecord : subRecords) {
// if (subRecord instanceof CommonObjectDataSubRecord) {
// CommonObjectDataSubRecord datasubRecord = (CommonObjectDataSubRecord) subRecord;
// if (datasubRecord.getObjectType() == CommonObjectDataSubRecord.OBJECT_TYPE_CHECKBOX) {
// System.out.println("ObjId: "
// + datasubRecord.getObjectId() + "\nDetails: "
// + datasubRecord.toString());
// }
// }
Pattern p = Pattern.compile("\\[sid=0x000A.+?\\[0(\\d),");
if (!(subRecord instanceof CommonObjectDataSubRecord)) {
Matcher m = p.matcher(subRecord.toString());
if (m.find()) {
String checkBit = m.group(1);
if (checkBit.length() == 1) {
boolean checked = "1".equals(checkBit);
//checkBox.setChecked(checked);
System.out.println(checked);
}
}
}
}
break;
}
}
}
pom文件中应用的jar 如下
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11</version>
</dependency>
测试
测试一 excel 文件如下:
程序运行结果:
测试二 excel 文件如下
程序运行结果如下:
这样我们就可以很愉快的获取到复选框的状态了。
- 本文标签: Java
- 本文链接: http://www.365codemall.com/article/19
- 版权声明: 本文由李俊杰原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权