poi技术实现数据的导入与导出

前言:

POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

Microsoft Office:是由微软公司开发的一套办公软件套装。常用组件有Word、Excel、PowerPoint等。

POI也用于操作Excel(电子表格)

一个excel文件就是一个工作簿Workbook

一个工作簿中可创建多张工作表Sheet

一个工作表中包含多个单元格Cell(单元格由列[Column]行[Row]组成)

由图观之:

目录:

1、实现工具+技术

2、主要对象介绍

3、操作步骤

4、代码展示


1、实现工具+技术

实现工具:eclipse(写代码)、Navicat(创建数据库和表)

技术:poi技术、IO流技术


2、poi中主要对象所对应的excel对象

poi对象excel对象
SXSSFWorkbook/ HSSFWorkbookexcel 工作簿workbook
HSSFSheet / Sheetexcel 工作表sheet
HSSFRow / Rowexcel 行 row
Cellexcel 单元格

 POI核心类     

1.工作簿(是创建或维护Excel工作簿的所有类的超接口)     

HSSFWorkbook : 这个类有读取和.xls 格式和写入Microsoft Excel文件的方法。    

XSSFWorkbook : 这个类有读写Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。 


3、操作步骤

1、在eclipse中创建项目,导入poi.jar包

 2、在MySQL数据库中创建报告表(report),添加数据

​​​​​​​

3、项目结构


4、代码展示:

DBHelper.java

package com.china.report.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class DBHelper {private static String driver="com.mysql.cj.jdbc.Driver";private static String url="jdbc:mysql://localhost:3306/lxy?useUnicode=true&characterEncoding=UTF-8";//注册静态驱动类static {try {Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}/*** 	连接数据库* @return*/public static Connection getCon() {//声明Connection对象Connection con = null;try {con = DriverManager.getConnection(url, "root", "1234");} catch (Exception e) {e.printStackTrace();}return con;}/*** 关闭连接* @param con 	Connection对象* @param ps 	PreparedStatement对象* @param rs 	ResultSet对象*/public static void closeDB(Connection con,PreparedStatement ps,ResultSet rs) {try {//判断con、ps、rs不为空if(con!=null) {con.close();}if(ps!=null) {ps.close();}if(rs!=null) {rs.close();}} catch (Exception e) {e.printStackTrace();}}
}

useUnicode=true&characterEncoding=UTF-8 作用是:指定字符的编码、解码格式。 

数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。


  ReportDao.java

package com.china.report.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;import com.china.report.entity.Report;
import com.china.report.util.DBHelper;public class ReportDao {private Connection con = null;private PreparedStatement ps = null;private ResultSet rs = null;/*** 	模糊查询* @param col	字段名* @param str	关键字* @return*/public ArrayList LikeId(String col,String str){//声明对象ArrayList rlist = new ArrayList<>();try {//连接数据库con = DBHelper.getCon();ps = con.prepareStatement("select * from report where "+col+" like '%"+str+"%' ");//执行sql语句rs = ps.executeQuery();//处理结果集while(rs.next()) {//实例化对象Report re = new Report(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6));//将对象添加到集合中rlist.add(re);}} catch (Exception e) {//异常信息e.printStackTrace();}finally {//关闭连接DBHelper.closeDB(con, ps, rs);}//返回集合return rlist;}/*** 	查询所有* @return*/public ArrayList getAll(){//声明对象ArrayList rlist = new ArrayList<>();try {//连接数据库con = DBHelper.getCon();ps = con.prepareStatement("select * from report");//执行sql语句rs = ps.executeQuery();//处理结果集while(rs.next()) {//实例化对象Report re = new Report(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6));//将对象添加到集合中rlist.add(re);}} catch (Exception e) {//异常信息e.printStackTrace();}finally {//关闭连接DBHelper.closeDB(con, ps, rs);}//返回集合return rlist;}/*** 	查询单个* @param rid 要查询的编号* @return*/public Report getId(int rid) {Report r = null;try {//连接数据库con = DBHelper.getCon();ps = con.prepareStatement("select * from report where rid="+rid);//执行sql语句rs = ps.executeQuery();if(rs.next()) {r = new Report(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6));}} catch (Exception e) {e.printStackTrace();}finally {DBHelper.closeDB(con, ps, rs);}return r;}/*** 	添加* @param r	要添加的对象* @return*/public int add(Report r) {int i = 0;try {//连接数据库con = DBHelper.getCon();ps = con.prepareStatement("insert into report(rname,rsex,rjzym,result,raddress) values(?,?,?,?,?)");//给占位符赋值ps.setString(1, r.getRname());ps.setString(2, r.getRsex());ps.setString(3, r.getRjzym());ps.setString(4, r.getResult());ps.setString(5, r.getRaddress());//执行sql语i = ps.executeUpdate();} catch (Exception e) {e.printStackTrace();}finally {DBHelper.closeDB(con, ps, null);}//返回受影响行数return i;}//测试public static void main(String[] args) {ReportDao rd = new ReportDao();System.out.println(rd.getAll());}}

Import.java [导入]

package com.china.report.main;import java.io.File;import java.io.FileInputStream;import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import com.china.report.dao.ReportDao;
import com.china.report.entity.Report;
/*** 	导入* @author gss**/
public class Import {public static void main(String[] args) throws Exception {//拿到对应xls文件File file = new File("E://Report//核酸检测报告.xls");//转换成文件流FileInputStream fis = new FileInputStream(file);//根据路径获取这个操作xls的实例  创建一个工作簿HSSFWorkbookHSSFWorkbook wb = new HSSFWorkbook(fis);//根据页面index 获取sheet页HSSFSheet sheet = wb.getSheetAt(0);//声明行数据,对应exel的行HSSFRow row = null;//实例化一个检测报告对象daoReportDao rd = new ReportDao();//循环sesheet页中数据从第二行开始,第一行是标题//System.out.println(sheet.getPhysicalNumberOfRows());//getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况for(int i = 1;i

 Export.java [导出]

package com.china.report.main;import java.io.FileOutputStream;import java.util.ArrayList;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import com.china.report.dao.ReportDao;
import com.china.report.entity.Report;public class Export {public static void main(String[] args) {//实例化一个dao类对象ReportDao rd = new ReportDao();//查询所有ArrayList rlist = rd.getAll();//标题String[] title = {"编号","姓名","性别","接种疫苗","结果","地址"};//创建一个SXSSFWorkbook工作簿  读取.xls 格式//自定义内存中数据的数量SXSSFWorkbook wb = new SXSSFWorkbook(10);//将SXSSFWorkbook工作簿添加到表Sheet sheet = wb.createSheet();//创建行,  0:代表第一个单元格Row row = sheet.createRow(0);//给单元格设置样式,添加到工作簿的样式表中CellStyle cellStyle = wb.createCellStyle();//创建一个新字体,并添加到工作簿的字体表中Font font = wb.createFont();//设置字体大小font.setFontHeightInPoints((short) 12);//设置字体加粗font.setBold(true);//给字体设置样式cellStyle.setFont(font);//设置单元格背景颜色cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//设置单元格填充样式(使用纯色背景颜色填充)cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//填充表头数据for(int i = 0;i

效果图: 

数据库导出的信息

导入到数据库的信息

​​​​​​​


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章