1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java poi对excel xls和xlsx格式文件导入导出

java poi对excel xls和xlsx格式文件导入导出

时间:2023-04-27 21:46:45

相关推荐

java poi对excel xls和xlsx格式文件导入导出

一)poi简介

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

官网POI API地址:/components/spreadsheet/quick-guide.html

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

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

XSSF是Microsoft Excel XML(+)文件格式(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();}}}

插入图片效果图:

项目结构图:

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

本章完结,待续,欢迎转载!

本文说明:该文章属于原创,如需转载,请标明文章转载来源!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。