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 ]的更多相关文章

  1. 关于Excel导入导出POI工具类

    import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import ...

  2. Apache Commons 工具类介绍及简单使用

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  3. linkin大话数据结构--apache commons工具类

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...

  4. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  5. Apache Commons 工具类介绍及简单使用(转载)

    原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...

  6. Java:Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...

  7. poi 工具类

    <!--POI--> <dependency> <groupId>org.apache.poi</groupId> <artifactId> ...

  8. apache StringUtils 工具类

    // org.apache.commons.lang3.StringUtils // 1.IsEmpty/IsBlank - checks if a String contains text 检查是否 ...

  9. apache ArrayUtils 工具类

    org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...

随机推荐

  1. Python四大神兽(迭代器&生成器&闭包&装饰器)

    一.迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不 ...

  2. 反向代理总结-reverse-proxy-with-url-rewrite

    iis 反向代理 : 1. 微软文档 https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/reverse-proxy- ...

  3. 如何在K3 WISE BOS集成开发工具中自定义字段过滤条件

    1.结论 对于输入过滤条件后BOS报“列名不正确”的过滤条件,要在列名前增加x2标识 无效的过滤 FNumber ,,,,,) 正确的过滤 x2.FNumber ,,,,,) 2.完全可以不看的探索过 ...

  4. 【Node.js】初识Node.js

    因组里项目需要,我和另外一名同事要学习Node.js.之前接触过Javascript,都是前台处理html时用到,现在要用Javascript做后端,学习Node.js,用一段时间专心学习一门新技术, ...

  5. sudo使用

    /etc/sudo.conf /etc/sudoers /etc/sudoers.d/ /etc/sudo-ldap.conf /etc/sudoer sudo安全策略配置文件 Defaults re ...

  6. tomcat8.5配置优化

    1.应用程序安全&关闭自动部署 默认值: <Host name="localhost" appBase="webapps" unpackWARs= ...

  7. Leetcode 78. Subsets (backtracking) 90 subset

    using prev class Solution { List<List<Integer>> res = new ArrayList<List<Integer&g ...

  8. 【JavaScript 封装库】BETA 1.0 测试版发布!

    /* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...

  9. querystring处理参数小利器

    相信上一章的讲解,相信大家对url地址有一个更直观的认识,在url解析的时候可以用querystring这样一个module替换,然后对这个query集成一个对象,这里不管是前端开发还是后端开发,都常 ...

  10. 宝塔linux面板,修改root密码

    root,密码忘记了.但宝塔vps的密码没忘记... 翻完宝塔linux面板都没看到有修改系统root密码的选项,后来尝试定时任务shell,也没成功, 最终快绝望的时候,发现通过添加插件成功修改密码 ...