一、导包
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>
二、一些API
1.XSSF读写 Excel OOXML XLSX格式档案的功能。
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
2.得到指定名称的Sheet
workbook.getSheet("Test0");
3.获取第一个表单Sheet
XSSFSheet sheetAt = workbook.getSheetAt(0);
4.获取最后一行 行数
sheetAt.getLastRowNum();
无一行数据返回0,最终返回n-1(n表示excel中行数,起始1)
5.获取有记录的行数
sheetAt.getPhysicalNumberOfRows();
无一行数据返回0,最终返回n-m(n表示excel中行数,起始1,m表示excel无数据行)
7.获取第i行数据,起始0
XSSFRow row = sheetAt.getRow(i);
8.获取最后一列 列数(返回n)
row.getLastCellNum();
9.获取有记录的列数 (返回n-m)
row.getPhysicalNumberOfCells();
10.获取第n列单元格数据
row.getCell(n) ;
测试excel数据:
返回结果:
三、代码
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.FileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="java.util.List" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="org.apache.poi.xssf.usermodel.XSSFWorkbook" %>
<%@ page import="org.apache.poi.xssf.usermodel.XSSFSheet" %>
<%@ page import="org.apache.poi.xssf.usermodel.XSSFRow" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//判断是否是多段数据(只有是多段数据才是文件上传)
//多段数据返回true,否则返回false
if (ServletFileUpload.isMultipartContent(request)) {
//创建FileItemFactory工厂实现类
FileItemFactory factory = new DiskFileItemFactory();
//创建用于解析数据的工具类ServletFileUpload类
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
//设置编码格式,解决上传文件名乱码问题
servletFileUpload.setHeaderEncoding("utf-8");
try {
//解析上传的数据,得到每一个表单项FileItem
List<FileItem> list = servletFileUpload.parseRequest(request);
//判断每个表单项是普通类型还是上传的文件
for (FileItem item : list) {
//上传的文件
if (!item.isFormField()) {
String filename = item.getName();//文件名
if (!filename.endsWith(".xlsx")) {
out.print("请上传.xlsx格式文件");
} else {
InputStream inputStream = item.getInputStream();
// XSSF读写 Excel OOXML XLSX格式档案的功能。
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
//workbook.getSheet("Test0");//得到指定名称的Sheet
//获取第一个表单Sheet
XSSFSheet sheetAt = workbook.getSheetAt(0);
int lastRowNum = sheetAt.getLastRowNum();//无数据返回0,n-1
int physicalNumberOfRows = sheetAt.getPhysicalNumberOfRows();//无数据返回0,n-m
//out.println("lastRowNum:" + lastRowNum);
//out.println("physicalNumberOfRows:" + physicalNumberOfRows);
for (int i = 0; i <= lastRowNum; i++) {
XSSFRow row = sheetAt.getRow(i);
if (row == null) continue;
int lastCellNum = row.getLastCellNum();
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
//out.println("<br>lastCellNum:" + lastCellNum);
//out.println("physicalNumberOfCells:" + physicalNumberOfCells);
for (int n = 0; n < lastCellNum; n++) {
out.print(row.getCell(n) + " ");
}
out.print("<br>");
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
%>
结果(可对为空的数据进行处理):
遍历已创建的行或单元格,跳过空行和单元格。
for (Row rows : sheetAt) {
for (Cell cell : rows) {
out.print(cell+" ");
}
out.print("<br>");
}
返回结果:
另附相关链接: