POI 읽 기 Excel 패키지
package com.aline.zkdm;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* POI Excel
*/
public class ExcelUtil {
/**
*
*/
private String formatter = "yyyy-MM-dd HH:mm:ss";
/**
*
*/
private SimpleDateFormat sdf = null;
/**
*
*/
private static ExcelUtil instance = new ExcelUtil();
/**
*
*
* @param dateFormatter
* @return
*/
public static ExcelUtil getInstance(String dateFormatter) {
if (dateFormatter != null && dateFormatter.length() != 0) {
instance.formatter = dateFormatter;
instance.sdf = null;
}
return instance;
}
/**
* cell String
*
* @param cell
* @return
*/
public String readCellValueToString(Cell cell) {
if (cell == null) {
return null;
}
CellType type = cell.getCellType();
switch (type) {
case STRING:
return cell.getStringCellValue();
case BOOLEAN:
return String.valueOf(cell.getBooleanCellValue());
case NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
if (sdf == null) {
try {
sdf = new SimpleDateFormat(formatter);
} catch (Exception e) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
}
return sdf.format(cell.getDateCellValue());
}
return String.valueOf(cell.getNumericCellValue());
case FORMULA:
return String.valueOf(cell.getCellFormula());
default:
return cell.toString();
}
}
/**
* Excel (2003,2007)
*
* @param in
* @return
* @throws IOException
*/
public Workbook readStreamToWorkBook(InputStream in) throws IOException {
checkNull(in);
Workbook wb = null;
try {
wb = new HSSFWorkbook(in);
} catch (IOException e) {
wb = new XSSFWorkbook(in);
}
return wb;
}
/**
* Excel (2003/2007)
* map key map value
* ,
*
* @param excelFile
* @param sdf
* @return
* @throws IOException
*/
public List<Map<String, String>> readToListMap(File excelFile, SimpleDateFormat sdf) throws IOException {
checkNull(excelFile);
return readToListMap(new FileInputStream(excelFile));
}
/**
* Sheet List
* map key map value
* ,
* :
* a,b,c
* 1,2,3,4
* 4
*
* @param excelStream
* @return
* @throws IOException
*/
public List<Map<String, String>> readToListMap(InputStream excelStream) throws IOException {
Workbook wb = readStreamToWorkBook(excelStream);
Sheet sheet = wb.getSheetAt(0);
return readSheetToListMap(sheet);
}
/**
* sheet, List
* map key map value
* ,
*
* @param sheet
* @return
*/
public List<Map<String, String>> readSheetToListMap(Sheet sheet) {
List<Map<String, String>> result = new ArrayList<>(sheet.getLastRowNum());
if (sheet == null || sheet.getFirstRowNum() == sheet.getLastRowNum()) {
return null;
}
Row firstRow = sheet.getRow(sheet.getFirstRowNum());
//
for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
Map<String, String> rowMap = new HashMap<>();
for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
String k = readCellValueToString(firstRow.getCell(j));
if (k == null) {
continue;
}
rowMap.put(k, readCellValueToString(row.getCell(j)));
}
result.add(rowMap);
}
return result;
}
/**
* Excel Sheet List>
*
* List
* List 0 1
*
* @param file
* @return
* @throws IOException
*/
public List<List<String>> readToListList(File file) throws IOException {
checkNull(file);
return readToListList(new FileInputStream(file), true);
}
/**
* Excel Sheet List>
* List
* List 0 1
*
* @param file
* @param skipFirst
* @return
* @throws IOException
*/
public List<List<String>> readToListList(File file, boolean skipFirst) throws IOException {
checkNull(file);
return readToListList(new FileInputStream(file), skipFirst);
}
/**
* Sheet , List>
*
* List
* List 0 1
*
* @param excelStream
* @return
* @throws IOException
*/
public List<List<String>> readToListList(InputStream excelStream) throws IOException {
Workbook wb = readStreamToWorkBook(excelStream);
Sheet sheet = wb.getSheetAt(0);
return readSheetToListList(sheet, true);
}
/**
* Sheet , List>
* List
* List 0 1
*
* @param excelStream
* @param skipFirst
* @return
* @throws IOException
*/
public List<List<String>> readToListList(InputStream excelStream, boolean skipFirst) throws IOException {
Workbook wb = readStreamToWorkBook(excelStream);
Sheet sheet = wb.getSheetAt(0);
return readSheetToListList(sheet, skipFirst);
}
/**
* Sheet , List>
* List
* List 0 1
*
* @param sheet
* @param skipFirst
* @return
* @throws IOException
*/
public List<List<String>> readSheetToListList(Sheet sheet, boolean skipFirst) {
if (sheet == null) {
return null;
}
List<List<String>> result = new ArrayList<>();
int start = skipFirst ? sheet.getFirstRowNum() : sheet.getFirstRowNum() + 1;
for (int i = start; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
List<String> rowList = new ArrayList<>(row.getLastCellNum() - row.getFirstCellNum());
for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
rowList.add(readCellValueToString(row.getCell(j)));
}
result.add(rowList);
}
return result;
}
/**
* Sheet
* List Sheet
* List
* Map ,key value
*
* @param file
* @return
* @throws IOException
*/
public List<List<Map<String, String>>> readAllSheetToListMap(File file) throws IOException {
checkNull(file);
return readAllSheetToListMap(new FileInputStream(file));
}
/**
* Excel List>>
* List Sheet
* List
* List 0 1
*
* @param excelStream
* @return
* @throws IOException
*/
public List<List<Map<String, String>>> readAllSheetToListMap(FileInputStream excelStream) throws IOException {
Workbook sheets = readStreamToWorkBook(excelStream);
List<List<Map<String, String>>> result = new ArrayList<>();
int numberOfSheets = sheets.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = sheets.getSheetAt(i);
result.add(readSheetToListMap(sheet));
}
return result;
}
/**
* Excel
*
* List Sheet
* List
* ,key value
*
* @param excelFile
* @return
*/
public List<List<List<String>>> readAllSheetToListList(File excelFile) throws IOException {
return readAllSheetToListList(excelFile, true);
}
/**
* Excel
* List Sheet
* List
* ,key value
*
* @param excelFile
* @param skipFirst
* @return
*/
public List<List<List<String>>> readAllSheetToListList(File excelFile, boolean skipFirst) throws IOException {
checkNull(excelFile);
return readAllSheetToListList(new FileInputStream(excelFile), skipFirst);
}
/**
* Excel
*
* List Sheet
* List
* ,key value
*
* @param excelStream
* @return
*/
public List<List<List<String>>> readAllSheetToListList(FileInputStream excelStream) throws IOException {
return readAllSheetToListList(excelStream, true);
}
/**
* Excel
* List Sheet
* List
* ,key value
*
* @param excelStream
* @param skipFirst
* @return
*/
public List<List<List<String>>> readAllSheetToListList(FileInputStream excelStream, boolean skipFirst) throws IOException {
checkNull(excelStream);
Workbook sheets = readStreamToWorkBook(excelStream);
List<List<List<String>>> result = new ArrayList<>();
int numberOfSheets = sheets.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
result.add(readSheetToListList(sheets.getSheetAt(i), skipFirst));
}
return result;
}
private void checkNull(Object o) {
if (o == null) {
throw new IllegalArgumentException("read file can not empty");
}
}
}
호출:
public class Main{
public static void main(String[] args) throw Exception{
// null :yyyy-MM-dd HH:mm:ss
ExcelUtil util = ExcelUtil.getInstance(null);
File file = new File("test.xls");
// key - value
List<Map<String, String>> rsMapList = util.readSheetToListMap(file);
// List
//
// List> rsListListSkipFirst = util.readToListList(file);
//
List<List<String>> rsListListNoSkip = util.readToListList(file, false);
//
//
// List>> rsAllListList = readAllSheetToListList(file);
//
List<List<List<String>>> rsAllListList = readAllSheetToListList(file, false);
// ListMap
List<List<Map<String, String>>> rsAllListMap = readAllSheetToListMap(file);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.