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 ...
随机推荐
- redis 读写锁实现
一 先搞清楚读写锁要做什么. 基本就是 读读不互斥,读写互斥,写写互斥.可重入. 关于redis读写锁,我写了一次之后,总觉得很怪,然后就上网看到大神的redisson了,果断借鉴一番. 二 读行为 ...
- IIS下不能下载文件的docx文档,XLSX文档的设置方法(转)
IIS下不能下载文件的docx文档,XLSX文档的设置方法 Office 2007的的界面风格默认格式中都是.DOCX,XLSX,PPTX等等后缀,连结中包含此类文件时,界面风格默认什么打不开的其实只 ...
- Bootstrap学习笔记(四)
四.JS插件 概述:与jQueryUI库类似,Bootstrap提供了十几个插件函数.有两种调用方法: (1) 传统JS变成方式 $(...).插件函数.(); (2) 使用data-*扩展属性(推荐 ...
- iframe跨域上传图片
方案一:用jquery的$.post异步提交,然后把返回来的值用jquery填充到隐藏域中.可是$.post不支持跨域. jQuery.ajax()支持get方式的跨域,这其实是采用jsonp的方式来 ...
- Dynamics CRM 2011通过客户端代码选择视图
在实施的过程中我们经常会遇到这样的场景,有个系统标准的Lookup字段对应的不是一种Entity,如很多地方的客户实际上可选account或者contact,有的地方可选systemuser或者tea ...
- JAVA的图片文字识别技术
从2013年的记录看,JAVA中图片文字识别技术大部分采用ORC的tesseract的软件功能,后来渐渐开放了java-api调用接口. 图片文字识别技术,还是采用训练的方法.并未从根本上解决图片与文 ...
- Quartz Cron表达式的二三事
最近在解决产品上的一个需求,就是定期生成报告(Report),我们叫做Scheduled Report. 原理:UI获取用户输入的时间信息,后台使用Spring框架设置定时任务,这里定时任务用的就是 ...
- matlab练习程序(粒子群优化PSO)
算法没有和图像处理直接相关,不过对于图像分类中的模式识别相关算法,也许会用到这个优化算法. 算法步骤: 1.首先确定粒子个数与迭代次数. 2.对每个粒子随机初始化位置与速度. 3.采用如下公式更新每个 ...
- centos7 gearmand-1.1.15打包rpm
wget https://github.com/gearman/gearmand/releases/download/1.1.15/gearmand-1.1.15.tar.gz -O /root/rp ...
- ring0 SSDTHook
SSDT 的全称是 System Services Descriptor Table,系统服务描述符表.这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来. ...