一)poi简介

Apache POI项目是用于基于Microsoft的OLE 2复合文档格式开发文件格式的纯Java端口的主项目。

官网POI API地址:https://poi.apache.org/components/spreadsheet/quick-guide.html

本章主要使用excel相关操作:

HSSF是对Microsoft Excel 97(-2003)文件格式(BIFF8)操作的纯Java API。

XSSF是Microsoft Excel XML(2007+)文件格式(OOXML)操作的纯Java API。

SS是一个使用通用API为两种格式提供通用支持的软件包。它们都支持读写功能。

HSSF API和XSSF API,主要是初始化实现类不一样,创建sheet,创建row,创建cell都是一样的原理。

HSSF创建电子文档:

Workbook wb = new HSSFWorkbook();try  (OutputStream fileOut = new FileOutputStream("workbook.xls")) {wb.write(fileOut);
}

XSSF创建电子文档:

Workbook wb = new XSSFWorkbook();try (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) {wb.write(fileOut);
}

pom.xml中引入jar:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version>
</dependency>

创建一个JavaBean,用于封装数据:

package com.oysept.vo;import java.util.Date;public class EmployeeVO {private Integer userid;private String username;private Date birthday;public EmployeeVO() {};public EmployeeVO(Integer userid, String username, Date birthday) {this.userid = userid;this.username = username;this.birthday = birthday;}public Integer getUserid() {return userid;}public void setUserid(Integer userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}
}

二)poi导出案例

第一步:先获取要导出的数据(比如从文件中读取,从数据库中读取数据)

第二步:创建Workbook

第三步:创建Sheet

第四步:创建Row

第五步:创建Cell

第六步:把数据写入到Workbook中

package com.oysept.test;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.WorkbookUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import com.oysept.vo.EmployeeVO;/*** 导出数据为excel xlsx格式* @author ouyangjun*/
public class ExportDataToXLSX {// 初始化数据public static List<EmployeeVO> init() {List<EmployeeVO> list = new ArrayList<EmployeeVO>();EmployeeVO emp1 = new EmployeeVO(111111, "AAAAAA", new Date());EmployeeVO emp2 = new EmployeeVO(222222, "BBBBBB", new Date());EmployeeVO emp3 = new EmployeeVO(333333, "CCCCCC", new Date());list.add(emp1);list.add(emp2);list.add(emp3);return list;}public static void main(String[] args) {// 导出数据List<EmployeeVO> list = init();// 列头String[] headers = {"ID", "姓名", "出生日期"};// 创建后缀为xls excelWorkbook wb= new XSSFWorkbook();try {// 指定创建sheet页名称, 并过滤掉一些特殊字符String safeName = WorkbookUtil.createSafeSheetName("[O'Brien's sales*?]"); // returns "O'Brien's sales"Sheet sheet = wb.createSheet(safeName);// 设置字体样式Font font = wb.createFont();font.setFontHeightInPoints((short)24);font.setFontName("Courier New");font.setItalic(true);font.setStrikeout(true);// 创建一个单元格的风格CellStyle cellStyle = wb.createCellStyle();// 设置日期格式, 格式存在org.apache.poi.ss.usermodel.BuiltinFormats类中CreationHelper createHelper = wb.getCreationHelper();cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("m/d/yy h:mm"));cellStyle.setFont(font); // 设置字体样式// 创建列头, 第一行Row row0 = sheet.createRow(0);row0.setHeight((short)230); // 设置一行的高度, 当一行的高度设置为0时, 可以实现隐藏效果for (int i = 0, len = headers.length; i < len; i++) {// 创建列row0.createCell(i).setCellValue(headers[i]);}// 创建数据, 从第二行开始for (int i = 0, size = list.size(); i < size; i++) {EmployeeVO vo = list.get(i);// 创建行Row iRow = sheet.createRow(i+1);iRow.createCell(0).setCellValue(vo.getUserid());iRow.createCell(1).setCellValue(vo.getUsername());// 创建列, 将该列设置为日期格式Cell iCell = iRow.createCell(2);iCell.setCellValue(vo.getBirthday());iCell.setCellStyle(cellStyle);}// 合并单元格, 因为前面已经有4行数据了, 所以从第5行开始Row row5 = sheet.createRow(4);row5.createCell(0).setCellValue("合并单元格");sheet.addMergedRegion(new CellRangeAddress(4, // 从第5行开始, 开始行6, // 到第7行结束, 结束行0, // 从第5行第1个单元格开始, 开始列2  // 到第5行第3个单元格结束, 结束列));// 如果不存在, 则直接新增, 如已存在, 则直接覆盖旧文件, 并且在操作文件过程中, 文件不能被本地打开OutputStream outputStream = new FileOutputStream(new File("D://workbook.xlsx"));if (wb != null) {wb.write(outputStream);outputStream.flush();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

导出数据效果图:

三)poi导入案例

第一步:读取excel文件,可先判断时xls或xlsx格式

第二步:读取Sheet、读取Row、读取Cell

第三步:把数据封装存储好(写入到文件中、写入到数据库中)

package com.oysept.test;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;/*** 从excel xlsx文件导入数据* @author ouyangjun*/
public class ImportDataFromXLSX {public static void main(String[] args) {try {InputStream inp = new FileInputStream(new File("D://workbook.xlsx"));// 获取工作簿Workbook wb = WorkbookFactory.create(inp);//Sheet sheet = wb.getSheetAt(0);//Row row = sheet.getRow(2);//Cell cell = row.getCell(3);// 打印excel中的数据for (Sheet sheet : wb) {for (Row row : sheet) {for (Cell cell : row) {// 封装数据, 然后再分批处理System.out.println(cell);}}}} catch (EncryptedDocumentException e) {e.printStackTrace();} catch (InvalidFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

四)Workbook中插入图片,支持JPEG、PNG、bitmap、PICT等多种图片格式

package com.oysept.test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;/*** 在Workbook中插入图片* @author ouyangjun*/
public class PictureWorkBook {public static void main(String[] args) {try {Workbook wb = new XSSFWorkbook();// 添加一张图片数据, 支持JPEG、PNG、bitmap、PICT等多种图片格式InputStream is = new FileInputStream("D://image.jpeg");byte[] bytes = IOUtils.toByteArray(is);int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);is.close();// 创建一个Sheet页Sheet sheet = wb.createSheet();// 初始化工具类CreationHelper helper = wb.getCreationHelper();// 添加一个图片框ClientAnchor anchor = helper.createClientAnchor();anchor.setRow1(1); // 指定图片摆放的Row位置anchor.setCol1(2); // 指定图片摆放的Cell位置// 创建一个绘画工具类Drawing drawing = sheet.createDrawingPatriarch();Picture pict = drawing.createPicture(anchor, pictureIdx);pict.resize(); // 自动设置图片的大小// 保存WorkbookOutputStream fileOut = new FileOutputStream("D://picture.xlsx");wb.write(fileOut); // 把内容写入到excel中} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

插入图片效果图:

项目结构图:

识别二维码关注个人微信公众号

本章完结,待续,欢迎转载!
 
本文说明:该文章属于原创,如需转载,请标明文章转载来源!

java poi对excel xls和xlsx格式文件导入导出相关推荐

  1. java xlsx怎么转换成excel格式_python小工具 | Excel的xls和xlsx格式文件转换

    众所周知Excel文件格式转换可以通过"另存为"的方式转换格式,可以说是简单方便,但是对于大量文件转换或者经常重复进行转换操作时,这种方法就很不方便. 显然利用程序对xls和xls ...

  2. c#读取生成excel表格文件xls、xlsx格式文件

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#存储生成excel表格格式xls.xlsx格式的文件 需要电脑安装对应版本的office,并且在项目中引用excel 测试代码 static vo ...

  3. python win32选取文件夹_python小工具 | Excel的xls和xlsx格式文件转换

    众所周知Excel文件格式转换可以通过"另存为"的方式转换格式,可以说是简单方便,但是对于大量文件转换或者经常重复进行转换操作时,这种方法就很不方便. 显然利用程序对xls和xls ...

  4. C# 用NPOI将DataGridView中显示的数据导出到Excel(.xls和.xlsx格式)

    文章目录 前言 实现步骤 一.安装NPOI 二.创建类 三.调用 前言 本地数据库表中有46785条数据,测试正常 初次运行程序第一次导出,用时在4-5s左右:此后再导出用时在2-3s左右:可能与缓存 ...

  5. r语言导出文件为xlxs_R语言学习——R读取txt、csv、xls和xlsx格式文件

    最近项目中运用到了R读取文件数据,所以把相关好用的.经过验证的方法总结了一下,有效避免下次入坑. 1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加 ...

  6. python | Pandas库导入Excel数据(xlsx格式文件)函数:read_excel()

    导入csv格式文件 python | Pandas库导入csv格式文件函数:read_excel()https://mp.csdn.net/mp_blog/creation/editor/123951 ...

  7. java使用poi读取存储excel表格,包括xls和xlsx格式

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用poi读取存储excel表格,包括xls和xlsx格式. 需要导入的包 poi-3.14.jar poi-ooxml-3.14.jar ...

  8. java读取Excel里面的内容包括(xls和xlsx)后缀文件

    java通过POI架包(HSSFWorkbook和XSSFWorkbook)读取Excel里面的内容包括(xls和xlsx)后缀文件 在我们平时的开发的过程,难免会遇到需要读取Excel文件,Exce ...

  9. python实现多EXCEL表格合并xls、xlsx格式

    目录 前言 代码的特点 完整代码 感言 前言 以下都是我学习CSDN里面的各位大神的分享: 我主要参考目标-主体和弹窗 次要参考-进度显示 代码的特点 1.可以弹窗选择需要合并的文件所在文件夹: 2. ...

最新文章

  1. Gradle's dependency cache may be corrupt解决方法
  2. webshpere MQ linux 上安装
  3. jset编写测试vue代码_使用 Jest 进行 Vue 单元测试
  4. 拔河原理html,大班活动拔河活动教案
  5. Centos7安装nginx教程!超简单
  6. ASE光源 ASE噪声
  7. 在VC中使用Windows管道技术编程
  8. kuka机器人齿轮箱油_库卡KUKA机器人保养润滑油00-144-898
  9. u盘启动蓝屏 索尼vaio_索尼笔记本电脑安装系统后出现蓝屏怎么处理
  10. 数字信号处理(一)时域采样定理
  11. python初体验——单/双/三引号的用法
  12. 文件上传漏洞—蚁剑连接地址错误、一句话木马php语法错误
  13. JAVA 仿XP画图板的总结
  14. cad图形不见了怎么办_CAD画图突然消失 怎么找回
  15. Gradually Vanishing Bridge for Adversarial Domain Adaptation(CVPR2020)笔记
  16. 基于 K-means 聚类算法实现图像区域分割matlab代码
  17. java 日期相差月数_Java 计算两个日期之间相差的月数
  18. Forge 发布倒计时三天:陈天写下他加入 ArcBlock 一周年的感慨 | ArcBlock 博客
  19. win10商店打不开_win10应用商店闪退是咋回事呢
  20. echarts社区水球图、echart水球图 动态水球图

热门文章

  1. MAYA好学吗,如何系统学习MAYA,自学难吗?
  2. VUE学习(二十一)、Vuex(getters、mapState与mapGetters、mapMutations与mapActions、多组件共享数据、模块化编码)
  3. echartsjs上证指数k线图表插件
  4. Openssl-1.0.2o库编译
  5. Android touch 事件的处理流程
  6. 软件的设计之生生不息
  7. 1269道Java技术答疑,阿里技术专家帮你Java技术进阶
  8. 音质好的无线入耳式耳机有哪些?无线入耳式耳机音质排行榜
  9. 苹果xsmax有高通基带吗_高通基带终于来了!彻底抛弃英特尔的苹果12:信号真的稳了吗?|基带|高通|iphone|手机|iphone手机...
  10. 微软小冰的服务器,和微软小冰这么玩,感觉可以玩一下午