Apache POI 工具类 [ PoiUtil ]
pom.xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
PoiUtil.java
package com.app.core.util;
import com.app.core.code.Symbol;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
@Log4j2
public class PoiUtil {
/**
* 将数据写入EXCEL
*
* @param <T>
* @param fileName EXCEL文件名称
* @param sheetName EXCEL页名
* @param data 待写入数据
* @throws Exception
*/
public static <T> void writeExcel(final String fileName, final String sheetName, final List<T[]> data) {
OutputStream out = null;
try {
// 创建 EXCEL 工作簿
XSSFWorkbook workBook = new XSSFWorkbook();
// 创建 EXCEL Sheet 页
XSSFSheet sheet = workBook.createSheet(sheetName);
// 声明 EXCEL 行
XSSFRow row;
// 声明 EXCEL 单元格
XSSFCell cell;
// 迭代设置EXCEL每行数据
int rowNo = 0; // 行号
for (T[] objs : data) {
row = sheet.createRow(rowNo++);
// 迭代设置EXCEL当前行每个单元格数据
int cellNo = 0; // 列号
for (T obj : objs) {
cell = row.createCell(cellNo++);
cell.setCellValue(String.valueOf(obj));
}
}
// 创建文件所在目录
String filePath = FilenameUtils.getFullPath(fileName);
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
// 设置文件输出流,写入EXCEL数据
String excelName = StringUtils.join(filePath, FilenameUtils.getBaseName(fileName), Symbol.DOT.getSymbol().concat("xlsx"));
out = new FileOutputStream(excelName);
// 写入文件流
workBook.write(out);
workBook.close();
} catch (Exception e) {
log.error("将数据写入EXCEL出错", e);
} finally {
try {
if (null != out) {
out.flush();
out.close();
}
} catch (IOException e) {
log.error("关闭文件输出流出错", e);
}
}
}
/**
* 读取EXCEL中指定下标页的数据
*
* @param fileName
* @param sheetIndex
* @return
*/
public static List<String[]> readExcel(final String fileName, final Integer sheetIndex) {
List<String[]> list = null;
InputStream in = null;
try {
// 获取文件输入流
String excelName = StringUtils.join(FilenameUtils.getFullPath(fileName), FilenameUtils.getBaseName(fileName), Symbol.DOT.getSymbol().concat("xlsx"));
in = new FileInputStream(excelName);
// 创建 EXCEL 工作簿
XSSFWorkbook workBook = new XSSFWorkbook(in);
// 获取 EXCEL Sheet 页
XSSFSheet sheet = workBook.getSheetAt(sheetIndex);
list = new ArrayList<String[]>();
String[] strArr = null;
// 遍历每行记录
for (Row row : sheet) {
strArr = new String[row.getPhysicalNumberOfCells()];
// 遍历每单元格记录
for (Cell cell : row) {
// 根据单元格的类型获取不同数据类型的值
CellType cellType = cell.getCellTypeEnum();
if (CellType.NUMERIC.equals(cellType))
strArr[cell.getColumnIndex()] = String.valueOf(cell.getNumericCellValue());
else if (CellType.STRING.equals(cellType))
strArr[cell.getColumnIndex()] = cell.getStringCellValue();
}
// 将数据放入集合
list.add(strArr);
}
workBook.close();
} catch (Exception e) {
log.error("读取EXCEL中指定下标页的数据出错", e);
} finally {
try {
if (null != in)
in.close();
} catch (IOException e) {
log.error("关闭文件输入流出错", e);
}
}
return list;
}
}
Symbol.java 标点符号枚举
package com.app.core.code;
public enum Symbol {
/**
* 逗号
*/
COMMA(","),
/**
* 句号
*/
DOT("."),
/**
* 冒号
*/
COLON(":"),
/**
* 分号
*/
SEMICOLON(";"),
/**
* 斜杠
*/
SLASH("/"),
/**
* 反斜杠
*/
BACKSLASH("\\"),
/**
* 加号
*/
PLUS("+"),
/**
* 减号
*/
DASH("-"),
/**
* 等号
*/
EQUALS("="),
/**
* 下划线
*/
UNDERSCORE("_"),
/**
* 左方括号
*/
LEFT_SQUARE_BRACKET("["),
/**
* 右方括号
*/
RIGHT_SQUARE_BRACKET("]"),
/**
* 左大括号
*/
LEFT_CURLY_BRACE("{"),
/**
* 右大括号
*/
RIGHT_CURLY_BRACE("}"),
/**
* 与
*/
AMPERSAND("&"),
/**
* 重音符(Tab键上面)
*/
ACCENT("`"),
/**
* 换行符
*/
LINE_BREAK("\r\n");
private final String symbol;
Symbol(String symbol) {
this.symbol = symbol;
}
public String getSymbol() {
return symbol;
}
}
Apache POI 工具类 [ PoiUtil ]的更多相关文章
- 关于Excel导入导出POI工具类
import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import ...
- Apache Commons 工具类介绍及简单使用
转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...
- linkin大话数据结构--apache commons工具类
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...
- Apache Commons 工具类简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
- Apache Commons 工具类介绍及简单使用(转载)
原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...
- Java:Apache Commons 工具类介绍及简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...
- poi 工具类
<!--POI--> <dependency> <groupId>org.apache.poi</groupId> <artifactId> ...
- apache StringUtils 工具类
// org.apache.commons.lang3.StringUtils // 1.IsEmpty/IsBlank - checks if a String contains text 检查是否 ...
- apache ArrayUtils 工具类
org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...
随机推荐
- 1.C#中的注释符
1.软件行业的道德规范 (1).程序员在日常写代码的过程中,一定要养成注释的好习惯,方便后面对理解和使用. (2).在给标识符命名的时候一定要规范,有理有据的,名字不能瞎写. 2.注释 注释符的作用: ...
- maven课程 项目管理利器-maven 3-9 maven依赖冲突 4星
依赖相同的jar包,版本不一致,优先选择哪个版本呢? 1 路径短的优先 如A依赖B,B依赖C,C依赖commons.jar 1.0 A依赖D,D依赖commons.jar 2.0 那么优先解析2.0, ...
- rem与em的区别
这两个单位都是相对元素 rem相对根元素 em相对于父级元素
- jQueryMobile(一)
一].jQuery Mobile 页面 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta ...
- Lync二次开发关于Lync启动退出问题
以前使用C++开发的version.dll文件,由于各个用户环境的不同,造成某些用户加载不了我们开发的插件,并且写version.dll的同事还没找到好的解决办法,所以得换一种思路去解决这个问题,就是 ...
- ios两个app之间跳转,传值的实现
两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...
- sql数据库常用操作
string connectionString = @"Data Source=(local)\sql2008r2;Initial Catalog=Movies;Uid=sa;Pwd=sql ...
- jquery对checkbox的操作汇总
1.全选 $("#btn1").click(function(){ $("input[name='checkbox']").attr("checked ...
- 3dsmax2014的下载、安装与注册激活教程详解
3dsmax2014的下载.安装与注册激活教程,虽然网上类似的教程文章不胜枚举,但大多比较粗枝大叶,没有详细的步骤,尤其对于电脑小白来说,更是不易参考,今天我就教大家如何注册破解3dsmax2014吧 ...
- ring0 进程隐藏实现
最近在学习内核编程,记录一下最近的学习笔记. 原理:将当前进程从eprocess结构的链表中删除 无法被! process 0 0 看见 #include "HideProcess.h&qu ...