1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > excelutil java_JAVA实现Excel的读取--ExcelUtil工具类

excelutil java_JAVA实现Excel的读取--ExcelUtil工具类

时间:2019-02-02 11:47:22

相关推荐

excelutil java_JAVA实现Excel的读取--ExcelUtil工具类

dream.jpg

首先声明一点,这是自己的写法,并不是标准写法,标准写法可以google一下。

主要运用的apache的POI包中的类。

1.首先创建一个ExcelUtil的工具类,并且把自己需要的方法写出来。

其中我使用的maven的方式,引入了这两个依赖:

org.apache.poi

poi

3.13

org.apache.poi

poi-ooxml

3.13

我这里暂时就需要两个方法:

第一个方法:读取Excel的文件表格的各个标题,一般的表格都是设有标题的,一般在Excel的第一行,但是不能例外有可能设在其他的行,所以设置的灵活一点。

/**

* 读取Excel文件的标题信息

* @return

*/

public static List readeExcelHeader(InputStream excelInputSteam,

int sheetNumber,

int headerNumber,

int rowStart){...}

第二个方法:读取Excel的内容数据,同样的,要设置的灵活一点,同时要将每一行的数据与标题向对应,所以使用Map来存储每一列的数据,最后生成一个List,所以返回值是List>

/**

* 读取Excel文件的内容

* @return

*/

public static List> readeExcelData(InputStream excelInputSteam,

int sheetNumber,

int headerNumber,

int rowStart){...}

2.开始进行内容的填充

首先读出header,即我们的标题,放在一个List headers中;

其次,每行的数据,放在HashMap(这样的形式),每行一个HashMap,最后将所有的HashMap放在一个List中,这样将返回List。

因为两个方法都有读取header的部分,第二个方法包含第一个方法,我就只说第二个方法。

第一个方法的实现:

public static List readeExcelHeader(InputStream excelInputSteam,

int sheetNumber,

int headerNumber,

int rowStart) throws IOException, InvalidFormatException {

//要返回的数据

List headers = new ArrayList();

//生成工作表

Workbook workbook = WorkbookFactory.create(excelInputSteam);

Sheet sheet = workbook.getSheetAt(sheetNumber);

Row header = sheet.getRow(headerNumber);

DataFormatter dataFormatter = new DataFormatter();

for (int i = 0; i < header.getLastCellNum(); i++) {

//获取单元格

Cell cell = header.getCell(i);

headers.add(dataFormatter.formatCellValue(cell));

}

return headers;

}

第二个方法的实现:

public static List> readeExcelData(InputStream excelInputSteam,

int sheetNumber,

int headerNumber,

int rowStart) throws IOException, InvalidFormatException {

//需要的变量以及要返回的数据

List> result = new ArrayList>();

List headers = new ArrayList();

//生成工作表

Workbook workbook = WorkbookFactory.create(excelInputSteam);

Sheet sheet = workbook.getSheetAt(sheetNumber);

Row header = sheet.getRow(headerNumber);

//最后一行数据

int rowEnd = sheet.getLastRowNum();

DataFormatter dataFormatter = new DataFormatter();

//获取标题信息

for (int i = 0; i < header.getLastCellNum(); ++i) {

Cell cell = header.getCell(i);

headers.add(dataFormatter.formatCellValue(cell));

}

//获取内容信息

for (int i = rowStart; i <= rowEnd; ++i) {

Row currentRow = sheet.getRow(i);

if (Objects.isNull(currentRow)) {

continue;

}

Map dataMap = new HashMap<>();

for (int j = 0; j < currentRow.getLastCellNum(); ++j) {

//将null转化为Blank

Cell data = currentRow.getCell(j, Row.CREATE_NULL_AS_BLANK);

if (Objects.isNull(data)) { //感觉这个if有点多余

dataMap.put(headers.get(j), null);

} else {

switch (data.getCellType()) { //不同的类型分别进行存储

case Cell.CELL_TYPE_STRING:

dataMap.put(headers.get(j), data.getRichStringCellValue().getString());

break;

case Cell.CELL_TYPE_NUMERIC:

if (DateUtil.isCellDateFormatted(data)) {

dataMap.put(headers.get(j), data.getDateCellValue());

} else {

dataMap.put(headers.get(j), data.getNumericCellValue());

}

break;

case Cell.CELL_TYPE_FORMULA:

dataMap.put(headers.get(j), data.getCellFormula());

break;

case Cell.CELL_TYPE_BOOLEAN:

dataMap.put(headers.get(j), data.getBooleanCellValue());

break;

default:

dataMap.put(headers.get(j), null);

}

}

}

result.add(dataMap);

}

return result;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。