Java解析excel原理,实现及潜在问题处理

原理

读取excel的方式目前较为流行的Apache POI和 EasyExcel文章已Apache POI对excel解析进行梳理

什么是Apache POI?

Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。

Apache POI

Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 然而,呈现和文本提取是它的主要特点。

工作簿

这是创建或维护Excel工作簿的所有类的超接口。它属于org.apache.poi.ss.usermodel包。是实现此接口的两个类,如下所示:

HSSFWorkbook : 这个类有读取和.xls 格式和写入Microsoft Excel文件的方法。它与微软Office97-2003版本兼容。

XSSFWorkbook : 这个类有读写Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。它与MS-Office版本2007或更高版本兼容。

Java实现读取excel

代码实现

public static void excel() throws Exception {

//用流的方式先读取到你想要的excel的文件

FileInputStream fis=new FileInputStream(new File(System.getProperty("user.dir")+"/src/excel.xls"));

//解析excel

POIFSFileSystem pSystem=new POIFSFileSystem(fis);

//获取整个excel

HSSFWorkbook hb=new HSSFWorkbook(pSystem);

System.out.println(hb.getNumCellStyles());

//获取第一个表单sheet

HSSFSheet sheet=hb.getSheetAt(0);

//获取第一行

int firstrow= sheet.getFirstRowNum();

//获取最后一行

int lastrow= sheet.getLastRowNum();

//循环行数依次获取列数

for (int i = firstrow; i < lastrow+1; i++) {

//获取哪一行i

Row row=sheet.getRow(i);

if (row!=null) {

//获取这一行的第一列

int firstcell= row.getFirstCellNum();

//获取这一行的最后一列

int lastcell= row.getLastCellNum();

//创建一个集合,用处将每一行的每一列数据都存入集合中

List list=new ArrayList<>();

for (int j = firstcell; j

//获取第j列

Cell cell=row.getCell(j);

if (cell!=null) {

System.out.print(cell+"\t");

list.add(cell.toString());

}

}

User user=new User();

if (list.size()>0) {

user.setUsername(list.get(1));

user.setPassword(list.get(2));

}

BaseDAO dao=new BaseDAO();

dao.save(user);

System.out.println();

}

}

fis.close();

}
 

读取excel数据行数多余excel表格行数

 Excel之前被删除过里面的数据,肉眼看表格中不存在该数据了,但实际是未删除彻底(Excel的一个bug)。或者格式问题导致读取的行数对于excel行数。Java程序读取表格的时候底层是根据xml进行解析的,把该文件上传至平台https://toolgg.com/excel-to-xml.html进行了解析成xml格式,发现了多余的空数据的数据。

 在Java中进行去空即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值