Excel导入导出工具——POI XSSF的使用
工具简介
POI是Apache提供的一款用于处理Microsoft Office的插件,它可以读写Excel、Word、PowerPoint、Visio等格式的文件。
其中XSSF是poi对Excel2007(.xlsx)文件操作的Java实现,例如,我们可以使用它来实现产品中常见的导入导出功能。
XSSF的常用类:
|-XSSFWorkbook:Excel文档对象
|-XSSFSheet:Excel的表单
|-XSSFRow:Excel的行
|-XSSFCell:Excel的单元格
|-XSSFCellStyle:Excel单元格的实现
|-XSSFCellHeader:Excel的表单头部
|-XSSFCellFooter:Excel的表单尾部
使用工具导出的步骤
0. 导入jar包或添加依赖,主要是apache的poi和poi-ooxml;
1. 新建Excel文档实例,并且在文档实例中新建表单;
2. 添加标题,即在Excel表单中新建标题行,然后遍历标题数据,对每一个数据都新建单元格,然后设置单元格的值,必要时设置样式;
3. 添加内容,即遍历内容数据,对每一条数据都新建行(主要不要覆盖标题行),然后遍行数据,对每一个数据都新建单元格,设置单元格的值和样式;
4. 返回Excel文档实例,其他组件(例如controller)使用这个文档进行输出流操作,实现文件导出。
导出示例Demo
pom文件
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
自定义工具类
package cn.monolog.diana.excel.util; import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.xssf.usermodel.*; /**
* 自定义工具类,用于读写Excel2007文件
* created on 2019-05-21
*/
public class ExcelUtil { /**
* 获取文档
* @param sheetname 表单名
* @param title 标题栏
* @param content 内容
* @return
*/
public static XSSFWorkbook getWorkbook (String sheetname, String[] title, String[][] content) {
//新建文档实例
XSSFWorkbook workbook = new XSSFWorkbook(); //在文档中添加表单
XSSFSheet sheet = workbook.createSheet(sheetname); //创建单元格格式,并设置居中
XSSFCellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); //创建第一行,用于填充标题
XSSFRow titleRow = sheet.createRow(0);
//填充标题
for (int i=0 ; i<title.length ; i++) {
//创建单元格
XSSFCell cell = titleRow.createCell(i);
//设置单元格内容
cell.setCellValue(title[i]);
//设置单元格样式
cell.setCellStyle(style);
} //填充内容
for (int i=0 ; i<content.length ; i++) {
//创建行
XSSFRow row = sheet.createRow(i+1);
//遍历某一行
for (int j=0 ; j<content[i].length ; j++) {
//创建单元格
XSSFCell cell = row.createCell(j);
//设置单元格内容
cell.setCellValue(content[i][j]);
//设置单元格样式
cell.setCellStyle(style);
}
} //返回文档实例
return workbook;
}
}
controller组件
package cn.monolog.diana.excel.controller; import cn.monolog.diana.excel.util.ExcelUtil;
import cn.monolog.diana.excel.model.Person;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; /**
* 用于模拟导入导出组件
* created on 2019-05-21
*/
@Controller
@RequestMapping("/excel")
public class ExcelController { /**
* 导出
* @param response
*/
@RequestMapping(value = "/export")
@ResponseBody
public void export(HttpServletResponse response) throws ParseException {
//获取要导出的数据列表,在生产环境中要从数据库中查询,这里为了简化,自己创建
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Person p1 = new Person(182, "张叁", "建筑", 25, simpleDateFormat.parse("2014-10-01"));
Person p2 = new Person(205, "李肆", "结构", 30, simpleDateFormat.parse("2015-10-01"));
Person p3 = new Person(311, "王伍", "给排水", 28, simpleDateFormat.parse("2016-10-01"));
Person p4 = new Person(377, "赵陆", "电气", 31, simpleDateFormat.parse("2017-10-01"));
Person p5 = new Person(505, "蒋柒", "暖通", 26, simpleDateFormat.parse("2018-10-01"));
List<Person> personList = new ArrayList<>();
personList.add(p1);
personList.add(p2);
personList.add(p3);
personList.add(p4);
personList.add(p5); //设置文件名、表单名、标题栏
String fileName = "员工信息表" + simpleDateFormat.format(new Date()) + ".xlsx";
String sheetname = "员工信息表";
String[] title = {"编号", "姓名", "专业", "年龄", "入职日期"}; //声明表单内容
String[][] content = new String[personList.size()][title.length];
//遍历要导出的数据列表,构造表单内容
for (int i=0 ; i<personList.size() ; i++) {
//获取表单第i行
String[] row = content[i];
//获取对应的数据实例
Person person = personList.get(i);
//填充内容
row[0] = String.valueOf(person.getId());
row[1] = person.getName();
row[2] = person.getMajor();
row[3] = String.valueOf(person.getAge());
row[4] = simpleDateFormat.format(person.getEnrollmentTime());
} //获取文档
XSSFWorkbook workbook = ExcelUtil.getWorkbook(sheetname, title, content); //声明输出流
OutputStream outputStream = null;
//响应到客户端
try {
//设置响应头
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8") );
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache"); //获取输出流
outputStream = response.getOutputStream(); //用文档写输出流
workbook.write(outputStream); //刷新输出流
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭输出流
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Excel导入导出工具——POI XSSF的使用的更多相关文章
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- java简易excel导入导出工具(封装POI)
Octopus 如何导入excel 如何导出excel github项目地址 Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文 ...
- Octopus——excel导入导出工具
Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...
- Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)
Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java 版权声明:本 ...
- Java基础学习总结(49)——Excel导入导出工具类
在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...
- 【原创】POI操作Excel导入导出工具类ExcelUtil
关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...
- java中excel导入\导出工具类
1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...
- java Excel导入导出工具类
本文章,导入导出依赖提前定义好的模板 package com.shareworx.yjwy.utils; import java.io.File; import java.io.FileInputSt ...
- 有史以来功能最全,使用最简单的excel导入/导出工具
Github地址:https://github.com/xuanbg/Utility. 还有其他一些福利,请各位园友自取. 构造方法 1.用于导出Excel文件 NpoiHelper(ExcelVer ...
随机推荐
- 现身说法:面对DDoS攻击时该如何防御?
上周,我们的网站遭到了一次DDoS攻击.虽然我对DDoS的防御还是比较了解,但是真正遇到时依然打了我个措手不及.DDoS防御是一件比较繁琐的事,面对各种不同类型的攻击,防御方式也不尽相同.对于攻击来的 ...
- 【vue】canvas验证码组件--数字/数字加字母
基于canvas的数字/数字+字符验证码 SIdentify.vue 组件 <!-- 基于canvas的数字/数字+字符验证码 --> <!-- 调用格式 <s-ident ...
- Error:Unexpected lock protocol found in lock file. Expected 3, found 49.
关于这个错误,今天研究了两三个小时的时间,查看网上的教程都解决不了问题,后来发现是自己的文件目录导入的有问题. 现在把自己关于解决这个问题的详细步骤说明一下. (1)首先,你先查看一下自己导入文件的目 ...
- ipcclean - 从退出的PostgreSQL服务器中删除共享内存和信号灯
SYNOPSIS ipcclean DESCRIPTION 描述 ipcclean 删除当前用户拥有的所有共享内存段和信号灯集. 它的目地是在 PostgreSQL 服务器 (postmaster(1 ...
- juniper 命令
show chassis hardware 查看系统硬件配置,fpc表示板卡,pic表示板卡中的槽位,xcvr表示板卡中的槽位的端口位置 show chassis envirmonent 查看系统运行 ...
- nslookup 工具的使用方法记录
查询IP地址 nslookup最简单的用法就是查询域名对应的IP地址,包括A记录和CNAME记录,如果查到的是CNAME记录还会返回别名记录的设置情况.其用法是: nslookup 域名 定查询记录类 ...
- AI换脸教程:DeepFaceLab使用教程(2.训练及合成)
如果前期工作已经准备完毕(DeepFaceLab下载(https://www.deepfacelabs.com/list-5-1.html),然后安装相应的显卡驱动,DeepFaceLab使用教程(1 ...
- MyEclipse使用教程:使用DevStyle增强型启动
[MyEclipse CI 2019.4.0安装包下载] DevStyle不仅仅是一组新的主题,它还包含了一个完全改进的启动体验,拥有更直观的UI,帮助开发人员快速启动IDE.DevStyle作为Ec ...
- vue 无缝滚动文字
前言 用vue做无缝滚动,字体弹幕 就上代码吧 <head> <meta charset="UTF-8"> <style> div, ul, l ...
- MySQL数据表
创建数据表 CREATE TABLE IF NOT EXISTS ([列名column][类型type][约束可选]) 查看数据表结构 DESC <表名> 修改数据表结构 ALTER ...