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

这篇具有很好参考价值的文章主要介绍了poi技术实现数据的导入与导出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

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

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

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

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

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

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

由图观之:

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

目录:

1、实现工具+技术

2、主要对象介绍

3、操作步骤

4、代码展示


1、实现工具+技术

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

技术:poi技术、IO流技术


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

poi对象 excel对象
SXSSFWorkbook/ HSSFWorkbook excel 工作簿workbook
HSSFSheet / Sheet excel 工作表sheet
HSSFRow / Row excel 行 row
Cell excel 单元格

 POI核心类     

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

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

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


3、操作步骤

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

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

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

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

3、项目结构

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


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<Report> LikeId(String col,String str){
		//声明对象
		ArrayList<Report> 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<Report> getAll(){
		//声明对象
		ArrayList<Report> 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的实例  创建一个工作簿HSSFWorkbook
		HSSFWorkbook wb = new HSSFWorkbook(fis);
		//根据页面index 获取sheet页
		HSSFSheet sheet = wb.getSheetAt(0);
		//声明行数据,对应exel的行
		HSSFRow row = null;
		//实例化一个检测报告对象dao
		ReportDao rd = new ReportDao();
		//循环sesheet页中数据从第二行开始,第一行是标题
		//System.out.println(sheet.getPhysicalNumberOfRows());
		//getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况
		for(int i = 1;i<sheet.getPhysicalNumberOfRows();i++) {
			//获取每一行的数据
			row = sheet.getRow(i);
			Report rep = new Report();
			//从第一个单元格中获取 姓名的值
			rep.setRname(row.getCell(0).getStringCellValue());
			//从第二个单元格中获取 性别的值
			rep.setRsex(row.getCell(1).getStringCellValue());
			//从第三个单元格中获取 接种疫苗的值
			rep.setRjzym(row.getCell(2).getStringCellValue());
			//从第四个单元格中获取 结果的值
			rep.setResult(row.getCell(3).getStringCellValue());
			//从第五个单元格中获取 地址的值
			rep.setRaddress(row.getCell(4).getStringCellValue());
			//调用添加方法
			rd.add(rep);
		}
		System.out.println("导入成功");
	}
}

 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<Report> 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<title.length;i++) {
			//创建新单元格
			Cell cell = row.createCell(i);
			//放入 标题单元格的数值
			cell.setCellValue(title[i]);
			//为单元格设置样式
			cell.setCellStyle(cellStyle);
			//设置列的宽度
			sheet.setColumnWidth(i, 200*50);
		}
		//填充数据库表数据
		for(int j = 0;j<rlist.size();j++) {
			//创建行
			Row r = sheet.createRow(j+1);
			Report rep = rlist.get(j);
			
			//获取 编号的数值(第一个单元格)
			Cell cell = r.createCell(0);
			cell.setCellValue(rep.getRid());
			//获取 名字的数值
			Cell cell2 = r.createCell(1);
			cell2.setCellValue(rep.getRname());
			//获取 性别的数值
			Cell cell3 = r.createCell(2);
			cell3.setCellValue(rep.getRsex());
			//获取 接种疫苗的数值
			Cell cell4 = r.createCell(3);
			cell4.setCellValue(rep.getRjzym());
			//获取 结果的数值
			Cell cell5 = r.createCell(4);
			cell5.setCellValue(rep.getResult());
			//获取 地址的数值
			Cell cell6 = r.createCell(5);
			cell6.setCellValue(rep.getRaddress());
		}
		//设置输出路径
		String filename = "E://Report//核酸检测信息.xls";
		try {
			// 输出到硬盘,所以要用到IO流,输出到fileName指定的路径上
			FileOutputStream fos = new FileOutputStream(filename);
			wb.write(fos);//写出
			wb.close();//关闭
			System.out.println("导出成功");
		} catch (Exception e) {
			//异常信息
			e.printStackTrace();
		}
	}
}

效果图: 

数据库导出的信息

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

导入到数据库的信息

poi技术实现数据的导入与导出​​​​​​​文章来源地址https://www.toymoban.com/news/detail-453632.html

到了这里,关于poi技术实现数据的导入与导出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • poi实现excel文件导入导出(基本数据导出、含格式导出、含批注导出、含图片图表导出)——springboot

    本文主要是介绍springboot + poi实现基本的excel文件导入导出,包含数据导出导入时数据的其他需求校验,导出含有批注信息、导出含有图片信息、导出含有图表信息等的介绍等等,主要是一个demo尽可能简单明了的来介绍相关功能即可。有什么问题可以在留言哦!并在文章末尾附

    2024年02月08日
    浏览(65)
  • POI 实现Excel导入导出

    什么是POI Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。 生成xls和xlsx有什么区别呢? XLS XLSX 只能打开xls格式,无法直接打开x

    2024年02月03日
    浏览(33)
  • 12、POI之数据导入导出

    【简介】: POI简介(Apache POI),Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 【官网】: Apacche POI 官网 【主要包含模块】: HSSF - 提供读写Microsoft Excel格式档案的功能。(.xls) XSSF - 提供读写Microsoft Excel OOXML格

    2024年02月07日
    浏览(34)
  • 数据导入导出(POI以及easyExcel)

            将一些数据库信息导出为Excel表格         将Excel表格数据导入数据库         大量数据的导入导出操作 常⽤的解决⽅案为: Apache POI 与阿⾥巴巴 easyExcel Apache POI 是基于 Office Open XML 标准( OOXML )和 Microsoft 的 OLE 2 复合⽂档 格式( OLE2 )处理各种⽂件格式的

    2024年02月13日
    浏览(32)
  • poi实现Excel文件的导入导出

    poi结构说明 引入poi依赖包 第一步、获取表内容数据: 根据表头内容与实体类属性对应的map,利用反射机制获取get方法来取出该实体数据 第二步、开始导出 编辑表格内样式 第三步、设定响应请求头格式,发送文件到客户端 判断表格行数据是否为空 判断表格列值是否为空 设

    2024年02月12日
    浏览(37)
  • 使用Apache POI数据导出及EasyExcel进行十万、百万的数据导出

    Apache POI 是基于 Office Open XML 标准( OOXML )和 Microsoft 的 OLE 2 复合⽂档 格式( OLE2 )处理各种⽂件格式的开源项⽬。 简⽽⾔之,您可以使⽤ Java 读写 MS Excel ⽂件,可以使⽤ Java 读写 MS Word 和 MS PowerPoint ⽂件。 1.HSSF - 提供读写 Microsoft Excel XLS 格式 (Microsoft Excel 97 (-2003)) 档案

    2024年02月15日
    浏览(36)
  • Java POI 百万规模数据的导入和导出

    使用POI基于事件模式解析案例提供的Excel文件 **用户模式:**加载并读取Excel时,是通过一次性的将所有数据加载到内存中再去解析每个单元格内容。当Excel数据量较大时,由于不同的运行环境可能会造成内存不足甚至OOM异常。 例如读取我们刚刚导出的百万数据: 会直接报内存

    2024年02月08日
    浏览(35)
  • Java原生POI实现的Excel导入导出(简单易懂)

    首先是Controller入口方法 这个接口在postman上传参是下面这样的: 注意里面的参数名称要和接口上的一致,不然会拿不到值 还有file那里key的类型要选file类型的,这样就可以在后面value里面选择文件 然后是Service方法 首先是Controller入口 strJson是用来接受其它参数的,一般导出的

    2024年02月11日
    浏览(35)
  • 使用POI和EasyExcel来实现excel文件的导入导出

    废话不多说咱们直接上干货!!!! 一.读取Excel表格 【1】使用POI读取excel表格中的数据 POI还可以操作我们这个word文档等等,他不仅仅只能弄Excel,而JXI只能操作excel 1.POI的结构,我们可以更具文件的类去选择 相关的对象我当前是使用的XLSX来操作的 HSSF - 提供读写Microsoft

    2024年02月05日
    浏览(39)
  • Apache POI 导出Excel报表

    大家好我是苏麟 , 今天聊聊Apache POI . 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。 官网 : Apache POI - the Java API for Microsoft Do

    2024年01月17日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包