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 ...
随机推荐
- HDU 5336——XYZ and Drops——————【广搜BFS】
XYZ and Drops Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- C# winform文件批量转编码 选择文件夹
C# winform文件批量转编码 选择文件夹 打开指定目录 private void btnFile_Click(object sender, EventArgs e) { OpenFileDial ...
- jQuery UI dialog 隐藏默认关闭按钮
var O_dialog = $("#dialog-modal"); O_dialog.dialog({ closeOnEscape: false, width: 250, hei ...
- Java入门之Tomcat运行
在上一篇<Java入门之Tomcat安装及环境变量配置>中提到,启动Tomcat要保持CMD下执行startup.bat的界面不关闭,才能访问Tomcat. 这是因为只有保持startup ...
- 从零开始的全栈工程师——js篇(js的异步)
js中的异步 Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任 ...
- Smile with face. Smile with mind.
Smile with face. Smile with mind.微笑不仅是挂在脸上的,更是发自心底的.
- 解决浏览器窗口缩小出现白色背景的bug
父容器上添加最小宽度min-width=xxxpx min-width的值大于浏览器横向滚动条出现时的宽度.
- 国外统计学课程主页Statistical Books, Manuals and Journals
国外统计学课程主页Statistical Books, Manuals and Journalshttp://statpages.info/javasta3.html
- 反射java
所谓反射(Refection),其实就是程序自己能够检查自身信息,就像程序会通过镜子反光来看自己本身一样.反射使得 Java语言具有了“动态性”,即程序首先会检查某个类中的方法.属性等信息,然后再动态 ...
- UML总结:UML用于建模描述结构和行为
UML有3种基本的构造块:组件.关系和图 我们将 UML 中的图分为两大类: 结构图 行为图 (1)结构建模: 结构建模具有捕捉静态的功能,包括下列各项: 类图 对象图 组件图 部署图 结构模型代表的 ...