使用poi导入导出Excel

首先引入poi依赖包

03版本的Excel和07版本的Excel所需要的依赖不同,都需要导入。

记录问题

最初导入的poi包为3.6版本。WorkBook类和Sheet类不能通过下面这种方法直接创建

        //1.创建工作簿Workbook workbook = new XSSFWorkbook();//2.创建一个工作表--sheetSheet sheet =workbook.createSheet("自测sheet");

需要通过下面这种方法细分,而这种方法创建的文件生成xlsx(07版)的文件时会导致文件损坏,将版本升值3.9后就可使用上面的方法创建工作簿,并可任意生成xls或xlsx文件而不损坏。

         //1.创建工作簿HSSFWorkbook workbook = new HSSFWorkbook();//2.创建一个工作表--sheetHSSFSheet sheet =workbook.createSheet("自测sheet");
        <!-- 03版本Excel导入 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><!-- 07版本Excel导入 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><!-- 日期格式化工具 --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope><version>4.12</version></dependency>

poi导入导出Excel是先将数据全部写入内存中,再进行后续操作。因此可能会导致内存泄漏。

简单的创建一个表格

String path="D:\\Work\\IdeaProject\\boot05-web-admin";//1.创建工作簿(03版为HSSFWorkbook,07版为XSSFWorkbook 但好像可以混用(待确认))Workbook workbook = new XSSFWorkbook();//2.创建一个工作表--sheetSheet sheet =workbook.createSheet("自测sheet");//3.创建一个行Row row=sheet.createRow(0);//4.创建一个单元格(1,1)Cell cell=row.createCell(0);cell.setCellValue("芜湖");//(1,2)Cell cell2=row.createCell(1);cell2.setCellValue("houbu");//创建第二行Row row2=sheet.createRow(1);Cell cell21=row2.createCell(0);cell21.setCellValue("起飞");Cell cell22=row2.createCell(1);cell22.setCellValue(2234);//生成一张表,使用07版本 使用xls结尾FileOutputStream fo=new FileOutputStream(path+"/ceshi.xlsx");workbook.write(fo);//关闭流fo.close();System.out.println("生成完毕");

Excel写入的几种方法

@Overridepublic void BigDataWrite03() throws IOException{//03版的Excel写入long begin = System.currentTimeMillis();Workbook wb=new HSSFWorkbook();Sheet sheet=wb.createSheet();for (int i = 0; i < 65536; i++) {Row row=sheet.createRow(i);for (int i1 = 0; i1 < 10; i1++) {Cell cell=row.createCell(i1);cell.setCellValue(i1);}}FileOutputStream fo=new FileOutputStream(path+"/bigExcel03.xls");wb.write(fo);fo.close();long end = System.currentTimeMillis();System.out.println((long)(end-begin)/1000);}@Overridepublic void BigDataWrite07() throws IOException {//07版方法速度慢,但可以写入更多数据long begin = System.currentTimeMillis();Workbook wb=new XSSFWorkbook();Sheet sheet=wb.createSheet();for (int i = 0; i < 100000; i++) {Row row=sheet.createRow(i);for (int i1 = 0; i1 < 10; i1++) {Cell cell=row.createCell(i1);cell.setCellValue(i1);}}FileOutputStream fo=new FileOutputStream(path+"/bigExcel07.xlsx");wb.write(fo);fo.close();long end = System.currentTimeMillis();System.out.println((long)(end-begin)/1000);}@Overridepublic void BigDataWrite07S() throws IOException {//SXSSFWorkbook类是更快的07版本操作类,但在操作时会产生临时文件,记得删除long begin = System.currentTimeMillis();Workbook wb=new SXSSFWorkbook();Sheet sheet=wb.createSheet();for (int i = 0; i < 100000; i++) {Row row=sheet.createRow(i);for (int i1 = 0; i1 < 10; i1++) {Cell cell=row.createCell(i1);cell.setCellValue(i1);}}FileOutputStream fo=new FileOutputStream(path+"/bigExcel07s.xlsx");wb.write(fo);//删除写入时产生的临时文件((SXSSFWorkbook)wb).dispose();fo.close();long end = System.currentTimeMillis();System.out.println((long)(end-begin)/1000);}

简单的读取Excel内容

 public void simpleExcelRead() throws IOException {//通过io读取文件FileInputStream io=new FileInputStream("D:\\Work\\IdeaProject\\boot05-web-admin\\ceshi.xlsx");//创建一个07版工作簿,excel的操作它都可以操作Workbook wb=new XSSFWorkbook(io);//得到表Sheet sheet= wb.getSheetAt(0);//得到列Row row = sheet.getRow(0);//得到行Cell cell=row.getCell(0);System.out.println(cell.getStringCellValue());}

读取Excel中的内容并判断其数据类型

 public void ExcelRead() throws IOException{FileInputStream io= new FileInputStream(path+"/Insert.xlsx");Workbook wb=new XSSFWorkbook(io);//获取第一个sheet页Sheet sheet=wb.getSheetAt(0);//获取第一行(一般是表头)Row rowTitle=sheet.getRow(0);if(rowTitle != null){//获取这行的cell数量int cellCount=rowTitle.getPhysicalNumberOfCells();//遍历获取表头内容for (int cellNum =0;cellNum<cellCount;cellNum++){Cell cell=rowTitle.getCell(cellNum);if(cell != null){int cellType=cell.getCellType();String value=cell.getStringCellValue();System.out.println(cellType+"==>"+value);}}//获取当前sheet页中的总行数int rowCount=sheet.getPhysicalNumberOfRows();//遍历所有行的内容for(int rowNum=1;rowNum<rowCount;rowNum++){//跳过表头,从第二行开始获取Row row=sheet.getRow(rowNum);if(row != null){//获取当前行的总列数cellCount=row.getPhysicalNumberOfCells();//遍历当前行的所有列的信息for (int cellNum=0;cellNum<cellCount;cellNum++){//拿取当前列Cell cell=row.getCell(cellNum);if(cell != null){//获取列中内容的类型int cellType=cell.getCellType();String cellValue="";//判断类型switch (cellType){case HSSFCell.CELL_TYPE_STRING://字符串cellValue=cell.getStringCellValue();System.out.println(cellNum+"这是字符串"+cellValue);break;case HSSFCell.CELL_TYPE_BOOLEAN://boolean类型cellValue=String.valueOf(cell.getBooleanCellValue());System.out.println(cellNum+"boolean类型"+cellValue);break;case HSSFCell.CELL_TYPE_NUMERIC://这是数字类型,但是包含数字和日期if (HSSFDateUtil.isCellDateFormatted(cell)){System.out.println("是日期");cellValue=String.valueOf(cell.getDateCellValue());}cellValue=String.valueOf(cell.getNumericCellValue());System.out.println(cellNum+"数字类型"+cellValue);break;case HSSFCell.CELL_TYPE_BLANK://为空break;case HSSFCell.CELL_TYPE_ERROR://错误System.out.println("数据类型错误");break;}}}}}}io.close();}

使用EasyExcel进行操作:

导入依赖

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.10</version></dependency>

详情可参照官方文档:EasyExcel · 语雀

SpringBoot使用poi或EasyExcel导入导出Excel文件相关推荐

  1. EasyExcel 导入导出Excel文件

    文章目录 写在前面 1.maven依赖 2.导入Excel文件 2.1.读取表格文件 2.2.如果有多个sheet表格 2.3.监听器封装(也可不封装) 2.4.读取数据格式化(实体类中添加注解) 3 ...

  2. POI和EasyExcel导入导出Excel表格

    这里写自定义目录标题 EasyExcel操作Excel表格 一.导入依赖: 二.编写实体类 三.编写测试类 POI操作Excel表格 基本功能: 一.导入依赖 二.测试类 2.1 使用HSSFWork ...

  3. java导入导出excel文件

    前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...

  4. EOS中如何实现导入导出excel文件

    阅读原文 导入导出excel文件 场景描述 将数据库表中的数据按照定义的EXCEL模板进行导出,下载到本地: 将EXCEL中的数据导入数据库相应的表中. 场景目标 通过本场景,解决EXCEL的导入导出 ...

  5. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

  6. java jdbc excel_详解poi+springmvc+springjdbc导入导出excel实例

    工作中常遇到导入导出excel的需求,本獂有一简答实例与大家分享. 废话不多说, 1.所需jar包: 2.前端代码: ieport.jsp: 导入\导出页面 function exportFile() ...

  7. 使用阿里开源的EasyExcel导入导出EXCEL——工具类

    工具类 package com.example.demo.util.excel;import com.alibaba.excel.EasyExcel; import com.alibaba.excel ...

  8. 导入导出excel文件

    场景描述 将数据库表中的数据按照定义的EXCEL模板进行导出,下载到本地: 将EXCEL中的数据导入数据库相应的表中. 场景目标 通过本场景,解决EXCEL的导入导出问题,供项目中学习使用. 页面效果 ...

  9. 批量导入/导出Excel文件(Python+Matlab)

    简单整理了下批量导入/导出Excel的Python和Matlab代码. Matlab 连续数字型.xlsx文件(如file_1.xlsx, file_2.xlsx, file_3.xlsx) clc, ...

最新文章

  1. 如何压缩PDF文件大小,满足各种上传大小要求
  2. Java并发包中的几种ExecutorService
  3. python【Matlibplot绘图库】-认识Matploblib
  4. Opengl-立方体贴图(天空盒子)
  5. Windows下删除.svn文件夹的最简易方法
  6. c++动态绑定和动态绑定
  7. Linux而不必进入password登陆自己主动sshserver方法
  8. 使用Scrapy框架发送POST请求
  9. shell 脚本 生成文件,文件名为日期时间
  10. 计算机硬盘修复教程,DiskGenius数据恢复教程 教你电脑硬盘数据如何恢复
  11. Netty工作笔记0055---Unpooled应用实例1
  12. 如何解决Please ensure that adb is correctly located at......
  13. 刷魔趣系统与安装google相机
  14. 鼠标自动点击器linux,鼠标自动点击器PC版下载
  15. js生成execl表格
  16. STM32U5,意法半导体新打造的超低功耗MCU旗舰版
  17. android计算dpi代码_android计算pad或手机的分辨率/像素/密度/屏幕尺寸/DPI值的方法...
  18. 03SpringMVC的使用
  19. ASP.NET4.0中 ValidateRequest=false失效
  20. 抹掉iPhone会有怎样后果 他人还能用吗

热门文章

  1. Linux中nginx配置图片访问路径
  2. 国际域名注册便宜处选择列表:
  3. 程序员最值得加入的200家国产替代软件公司汇总!!!
  4. VMware ESXi 8.0b - 领先的裸机 Hypervisor (Dell HPE Custom Image update)
  5. 两个向量的点乘和叉乘怎么算_向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读...
  6. 修改浏览器滚动条样式
  7. Python爬虫入门案例:获取百词斩已学单词列表
  8. 真假3D:VR成像技术探秘
  9. 刷题记录:牛客NC19910[CQOI2007]矩形RECT
  10. Hive日期函数使用