【Java】JAVA-日常工作-POI-Utils

记录一下工作中使用的poi(可以做为工具类来使用)

/**

* 处理excel读入的工具类

* Created by Liujishuai on 2015/8/5.

*/

public class ExcelUtils {

/**

* 要求excel版本在2007以上

*

* @param file 文件信息

* @return

* @throws Exception

*/

public static List<List<Object>> readExcel(File file) throws Exception {

if(!file.exists()){

throw new Exception("找不到文件");

}

List<List<Object>> list = new LinkedList<List<Object>>();

XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));

// 读取第一张表格内容

XSSFSheet sheet = xwb.getSheetAt(0);

XSSFRow row = null;

XSSFCell cell = null;

for (int i = (sheet.getFirstRowNum() + 1); i <= (sheet.getPhysicalNumberOfRows() - 1); i++) {

row = sheet.getRow(i);

if (row == null) {

continue;

}

List<Object> linked = new LinkedList<Object>();

for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {

Object value = null;

cell = row.getCell(j);

if (cell == null) {

continue;

}

switch (cell.getCellType()) {

case XSSFCell.CELL_TYPE_STRING:

//String类型返回String数据

value = cell.getStringCellValue();

break;

case XSSFCell.CELL_TYPE_NUMERIC:

//日期数据返回LONG类型的时间戳

if ("yyyy\"年\"m\"月\"d\"日\";@".equals(cell.getCellStyle().getDataFormatString())) {

//System.out.println(cell.getNumericCellValue()+":日期格式:"+cell.getCellStyle().getDataFormatString());

value = DateUtils.getMillis(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())) / 1000;

} else {

//数值类型返回double类型的数字

//System.out.println(cell.getNumericCellValue()+":格式:"+cell.getCellStyle().getDataFormatString());

value = cell.getNumericCellValue();

}

break;

case XSSFCell.CELL_TYPE_BOOLEAN:

//布尔类型

value = cell.getBooleanCellValue();

break;

case XSSFCell.CELL_TYPE_BLANK:

//空单元格

break;

default:

value = cell.toString();

}

if (value != null && !value.equals("")) {

//单元格不为空,则加入列表

linked.add(value);

}

}

if (linked.size()!= 0) {

list.add(linked);

}

}

return list;

}

/**

* 要求excel版本在2007以上

*

* @param fileInputStream 文件信息

* @return

* @throws Exception

*/

public static List<List<Object>> readExcel(FileInputStream fileInputStream) throws Exception {

List<List<Object>> list = new LinkedList<List<Object>>();

XSSFWorkbook xwb = new XSSFWorkbook(fileInputStream);

// 读取第一张表格内容

XSSFSheet sheet = xwb.getSheetAt(1);

XSSFRow row = null;

XSSFCell cell = null;

for (int i = (sheet.getFirstRowNum() + 1); i <= (sheet.getPhysicalNumberOfRows() - 1); i++) {

row = sheet.getRow(i);

if (row == null) {

continue;

}

List<Object> linked = new LinkedList<Object>();

for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {

Object value = null;

cell = row.getCell(j);

if (cell == null) {

continue;

}

switch (cell.getCellType()) {

case XSSFCell.CELL_TYPE_STRING:

value = cell.getStringCellValue();

break;

case XSSFCell.CELL_TYPE_NUMERIC:

if ("yyyy\"年\"m\"月\"d\"日\";@".equals(cell.getCellStyle().getDataFormatString())) {

//System.out.println(cell.getNumericCellValue()+":日期格式:"+cell.getCellStyle().getDataFormatString());

value = DateUtils.getMillis(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())) / 1000;

} else {

//System.out.println(cell.getNumericCellValue()+":格式:"+cell.getCellStyle().getDataFormatString());

value = cell.getNumericCellValue();

}

break;

case XSSFCell.CELL_TYPE_BOOLEAN:

value = cell.getBooleanCellValue();

break;

case XSSFCell.CELL_TYPE_BLANK:

break;

default:

value = cell.toString();

}

if (value != null && !value.equals("")) {

//单元格不为空,则加入列表

linked.add(value);

}

}

if (linked.size()!= 0) {

list.add(linked);

}

}

return list;

}

/**

* 导出excel

* @param excel_name 导出的excel路径(需要带.xlsx)

* @param headList excel的标题备注名称

* @param fieldList excel的标题字段(与数据中map中键值对应)

* @param dataList excel数据

* @throws Exception

*/

public static void createExcel(String excel_name, String[] headList,

String[] fieldList, List<Map<String, Object>> dataList)

throws Exception {

// 创建新的Excel 工作簿

XSSFWorkbook workbook = new XSSFWorkbook();

// 在Excel工作簿中建一工作表,其名为缺省值

XSSFSheet sheet = workbook.createSheet();

// 在索引0的位置创建行(最顶端的行)

XSSFRow row = sheet.createRow(0);

// 设置excel头(第一行)的头名称

for (int i = 0; i < headList.length; i++) {

// 在索引0的位置创建单元格(左上端)

XSSFCell cell = row.createCell(i);

// 定义单元格为字符串类型

cell.setCellType(XSSFCell.CELL_TYPE_STRING);

// 在单元格中输入一些内容

cell.setCellValue(headList[i]);

}

// ===============================================================

//添加数据

for (int n = 0; n < dataList.size(); n++) {

// 在索引1的位置创建行(最顶端的行)

XSSFRow row_value = sheet.createRow(n + 1);

Map<String, Object> dataMap = dataList.get(n);

// ===============================================================

for (int i = 0; i < fieldList.length; i++) {

// 在索引0的位置创建单元格(左上端)

XSSFCell cell = row_value.createCell(i);

// 定义单元格为字符串类型

cell.setCellType(XSSFCell.CELL_TYPE_STRING);

// 在单元格中输入一些内容

cell.setCellValue((dataMap.get(fieldList[i])).toString());

}

// ===============================================================

}

// 新建一输出文件流

FileOutputStream fos = new FileOutputStream(excel_name);

// 把相应的Excel 工作簿存盘

workbook.write(fos);

fos.flush();

// 操作结束,关闭文件

fos.close();

}

}

在使用poi之前要导入相关的jar包(poi的jar包的作用)

【Java】JAVA-日常工作-POI-Utils
使用之前导入jar包

<!--poi对excel2007以上版本的支持-->

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>3.12</version>

</dependency>

在使用poi时在导入excel文件时遇到了### java.lang.ClassNotFoundException异常
解决的方案是:
导入了jar包

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>4.1.2</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml-schemas</artifactId>

<version>4.1.2</version>

</dependency>

要注意版本,不要造成版本冲突.

以上是 【Java】JAVA-日常工作-POI-Utils 的全部内容, 来源链接: utcz.com/a/87694.html

回到顶部