ExcelUtilsEXCEL文档解析工具类

编程

import com.example.demo.util.idmake.KeyGenerator;

import org.apache.commons.lang.StringUtils;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.text.DecimalFormat;

import java.util.ArrayList;

import java.util.List;

/**

* EXCEL文档解析工具类

* 该工具能将EXCEL文档中的表解析为由JAVA基础类构成的数据集合

* 整个EXCEL表由多个行组成,每行用一个LIST表示.

* EXCEL中的行由一个LIST表示,各列的数据索引从0开始一一对齐存放在这个LIST中; 多个行构成整个表,由一个LIST存放多个行.

*/

public class ExcelUtils {

private Logger logger = LoggerFactory.getLogger(ExcelUtils.class);

private HSSFWorkbook workbook;

/**

* 文件输入流方式获取文件

*

* @param excelFile

* @throws IOException

*/

public ExcelUtils(File excelFile) throws IOException {

workbook = new HSSFWorkbook(new FileInputStream(excelFile));

}

/**

* 纯输入流方式获取文件

*

* @param is

* @throws IOException

*/

public ExcelUtils(InputStream is) throws IOException {

workbook = new HSSFWorkbook(is);

}

/**

* 获得表中的数据

*

* @param sheetNum 表格索引 从0开始

* @param isAddId 是否自动增加id

* @return

* @throws IOException

*/

public List<String[]> getDatasFromSheet(int sheetNum, boolean isAddId) throws IOException {

// 表格数据对象

List<String[]> resultList = new ArrayList<String[]>();

// 获得指定的表

HSSFSheet sheet = workbook.getSheetAt(sheetNum);

// 获得数据总行数

int rowCount = sheet.getLastRowNum();

logger.info("excel表总行数: " + rowCount);

if (rowCount < 1) {

return null;

}

// 逐行读取数据

for (int rowIndex = 0; rowIndex <= rowCount; rowIndex++) {

// 获得行对象

HSSFRow row = sheet.getRow(rowIndex);

if (row == null) {

continue;

}

// 本行单元格的个数

int columnCount = row.getLastCellNum();

if (isAddId) {

columnCount = row.getLastCellNum() + 1;

}

String[] rowData = getRowDatas(row, columnCount, isAddId);

if (rowData != null) {

resultList.add(rowData);

}

}

return resultList;

}

/**

* 获得表中的数据

*

* @param sheetNum 表格索引 从0开始

* @param columnNum 每行数据个数

* @param isAddId 是否自动增加id

* @return

* @throws IOException

*/

public List<String[]> getDatasFromSheet(int sheetNum, int columnNum, boolean isAddId) throws IOException {

// 表格数据对象

List<String[]> resultList = new ArrayList<String[]>();

// 获得指定的表

HSSFSheet sheet = workbook.getSheetAt(sheetNum);

// 获得数据总行数

int rowCount = sheet.getLastRowNum();

logger.info("excel表总行数: " + rowCount);

if (rowCount < 1) {

return null;

}

if (isAddId) {

columnNum++;

}

// 逐行读取数据

for (int rowIndex = 0; rowIndex <= rowCount; rowIndex++) {

// 获得行对象

HSSFRow row = sheet.getRow(rowIndex);

if (row == null) {

continue;

}

String[] rowData = getRowDatas(row, columnNum, isAddId);

if (rowData != null) {

resultList.add(rowData);

}

}

return resultList;

}

/**

* 获得表中的数据

*

* @param sheetNumber 表格索引 从0开始

* @param flag flag=0 不增加id,flag=1自动增加id

* @return

* @throws IOException

*/

public List<Object[]> getNewDatasInSheet(int sheetNumber, int flag) throws IOException {

List<Object[]> result = new ArrayList<Object[]>();

// 获得指定的表

HSSFSheet sheet = workbook.getSheetAt(sheetNumber);

// 获得数据总行数

int rowCount = sheet.getLastRowNum();

//int rowCount=this.getRightRows(sheetAs);

int sjrsCols = 0;

logger.info("found excel rows count: " + rowCount);

if (rowCount < 1) {

return null;

}

// 逐行读取数据

for (int rowIndex = 0; rowIndex <= rowCount; rowIndex++) {

// 获得行对象

HSSFRow row = sheet.getRow(rowIndex);

if (row != null) {

// 获得本行中单元格的个数

int columnCount = 0;

if (flag == 0) {

columnCount = row.getLastCellNum();

} else {

columnCount = row.getLastCellNum() + 1;

}

Object[] rowData = new Object[columnCount];

// 获得本行中各单元格中的数据

if (flag == 0) {

for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {

HSSFCell cell = row.getCell(columnIndex);

// 获得指定单元格中数据

Object cellStr = this.getCellString(cell);

if (cellStr != null) {

if (cellStr.toString().trim().length() > 0) {

rowData[columnIndex] = cellStr.toString().trim();

sjrsCols++;

}

}

}

} else {

for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {

if (columnIndex == 0) {

rowData[0] = KeyGenerator.getUUID();

} else {

// 获得指定单元格中数据

HSSFCell cell = row.getCell(columnIndex - 1);

Object cellStr = this.getCellString(cell);

if (cellStr != null) {

if (cellStr.toString().trim().length() > 0) {

rowData[columnIndex] = cellStr.toString().trim();

sjrsCols++;

}

}

}

}

}

if (sjrsCols != 0) {

result.add(rowData);

}

sjrsCols = 0;

}

}

return result;

}

/**

* 获取单行单元格数据

* @param row

* @param columnNum

* @param isAddId

* @return

*/

private String[] getRowDatas(HSSFRow row, int columnNum, boolean isAddId) {

String[] rowData = new String[columnNum];

boolean hasData = false;

for (int i = 0; i < columnNum; i++) {

int index = i;

if (isAddId) {

index = i - 1;

if (i == 0) {

rowData[0] = KeyGenerator.getUUID();

}

}

HSSFCell cell = row.getCell(index);

// 获得指定单元格中数据

String cellStr = this.getCellString(cell);

if (StringUtils.isNotBlank(cellStr)) {

rowData[i] = cellStr;

hasData = true;

}

}

if (hasData) {

return rowData;

} else {

return null;

}

}

/**

* 获得单元格中的内容

*

* @param cell 单元格对象

* @return

*/

protected String getCellString(HSSFCell cell) {

String result = null;

if (cell != null) {

int cellType = cell.getCellType();

switch (cellType) {

case HSSFCell.CELL_TYPE_STRING:

result = cell.getRichStringCellValue().getString();

break;

case HSSFCell.CELL_TYPE_NUMERIC:

DecimalFormat df = new DecimalFormat("#");

result = df.format(cell.getNumericCellValue());

break;

case HSSFCell.CELL_TYPE_FORMULA:

result = cell.getCellFormula();

break;

case HSSFCell.CELL_TYPE_ERROR:

result = null;

break;

case HSSFCell.CELL_TYPE_BOOLEAN:

result = cell.getBooleanCellValue() ? "true" : "false";

break;

case HSSFCell.CELL_TYPE_BLANK:

result = null;

break;

}

if (result != null) {

result = result.trim();

}

}

return result;

}

}

 

以上是 ExcelUtilsEXCEL文档解析工具类 的全部内容, 来源链接: utcz.com/z/512708.html

回到顶部