Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook

引入maven依赖

        <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>

HSSFWorkbook

读取xls文件,也就是老版本的97-2003版本的excel

读取

package com.excel;import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** 一个EXCEL包含如下几个基础组成* HSSFSheet:表单,通过HSSFWorkbook获取* Row:行,通过HSSFSheet获取* Cell:单元格,通过Row获取* 下标均从0开始* */
public class MyExcel {public static void getHssf() throws IOException {String local_path = System.getProperty("user.dir");//获取当前用户的当前工作目录String path = local_path+"/src/main/java/com/excel/97到2004excel.xls";//添加上文件的路径,组成文件的绝对路径File file=new File(path);FileInputStream fileInputStream=new FileInputStream(file);//通过流的方式读取文件HSSFWorkbook hssfWorkbook=new HSSFWorkbook(fileInputStream);HSSFSheet hssfSheet=hssfWorkbook.getSheet("Sheet1");//通过sheet的名字来获取数据HSSFSheet hssfSheet1=hssfWorkbook.getSheetAt(0);//通过下标来获取数据int firstRowNum=hssfSheet1.getFirstRowNum();//获取第一行的下标int lastRowNum = hssfSheet1.getLastRowNum();//获取最后一行的下标/*** 注意:比如我们这一行有四列,则lastRowNum=3,firstRowNum=0* 所以下面的for循环为<=* */for (int i=firstRowNum;i<=lastRowNum;i++){Row row=hssfSheet1.getRow(i);//根据下标,获取对应行的数据int firstCellNum=row.getFirstCellNum();//获取对应行的第一个cell的下标int lastCellNum=row.getLastCellNum();//获取对应行的最后一个cell的下标/*** 注意:比如这一行有四个单元格,则firstCellNum=0,lastCellNum=4,注意=4!!!!!,并不是等于3* 所以下面的for循环为<* 之所以没有在循环外就确定这两个值,是因为你没有办法确定每一行的列数都一致* */List<String> list=new ArrayList<>();//新建一个list用来存放数据for (int j=firstCellNum;j<lastCellNum;j++){Cell cell=row.getCell(j);//通过下标获取对应的单元格的信息System.out.print(cell+"\t");list.add(cell.toString());}System.out.println();//确保每一行数据打印出来都跨行}fileInputStream.close();//使用完成之后要记得关闭这个流}public static void main(String[] args) throws IOException {MyExcel.getHssf();}
}

结果

姓名   年龄  职业
张三  18.0    法外狂徒
李四  19.0    小偷
王武  20.0    教师  男

写入

同XSSFWorkbook

XSSFWorkbook

读取xlsx文件,也就是高于2003版本的excel,读写均与HSSFWorkbook保持一致

读取

package com.excel;import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** 一个EXCEL包含如下几个基础组成* HSSFSheet:表单,通过HSSFWorkbook获取* Row:行,通过HSSFSheet获取* Cell:单元格,通过Row获取* 下标均从0开始* */
public class MyExcel {public static void getXssf() throws IOException {String local_path = System.getProperty("user.dir");//获取当前用户的当前工作目录String path = local_path+"/src/main/java/com/excel/xlsx的excel.xlsx";//添加上文件的路径,组成文件的绝对路径File file=new File(path);FileInputStream fileInputStream=new FileInputStream(file);//通过流的方式读取文件XSSFWorkbook xssfWorkbook=new XSSFWorkbook(fileInputStream);XSSFSheet xssfSheet=xssfWorkbook.getSheet("Sheet1");//通过sheet的名字来获取数据XSSFSheet hssfSheet1=xssfWorkbook.getSheetAt(0);//通过下标来获取数据int firstRowNum=hssfSheet1.getFirstRowNum();//获取第一行的下标int lastRowNum = hssfSheet1.getLastRowNum();//获取最后一行的下标/*** 注意:比如我们这一行有四列,则lastRowNum=3,firstRowNum=0* 所以下面的for循环为<=* */for (int i=firstRowNum;i<=lastRowNum;i++){Row row=hssfSheet1.getRow(i);//根据下标,获取对应行的数据int firstCellNum=row.getFirstCellNum();//获取对应行的第一个cell的下标int lastCellNum=row.getLastCellNum();//获取对应行的最后一个cell的下标/*** 注意:比如这一行有四个单元格,则firstCellNum=0,lastCellNum=4,注意=4!!!!!,并不是等于3* 所以下面的for循环为<* 之所以没有在循环外就确定这两个值,是因为你没有办法确定每一行的列数都一致* */List<String> list=new ArrayList<>();//新建一个list用来存放数据for (int j=firstCellNum;j<lastCellNum;j++){Cell cell=row.getCell(j);//通过下标获取对应的单元格的信息System.out.print(cell+"\t");list.add(cell.toString());}System.out.println();//确保每一行数据打印出来都跨行}fileInputStream.close();//使用完成之后要记得关闭这个流}public static void main(String[] args) throws IOException {MyExcel.getXssf();}
}

结果

姓名   年龄  职业
张三  18.0    法外狂徒
李四  19.0    小偷
王武  20.0    教师  男

写入

package com.excel;import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** 一个EXCEL包含如下几个基础组成* HSSFSheet:表单,通过HSSFWorkbook获取* Row:行,通过HSSFSheet获取* Cell:单元格,通过Row获取* 下标均从0开始* */
public class MyExcel {public static void getXssf() throws IOException {XSSFWorkbook xssfWorkbook=new XSSFWorkbook();XSSFSheet xssfSheet=xssfWorkbook.createSheet("nice");//注意,这种新增sheet的方式,如果你的excel原来在第一个sheet页面上有内容,会自动覆盖原来的内容,所以尽量使用空的EXCEL文档String[] biaoti=new String[]{"姓名","职业","年龄"};Row   row=xssfSheet.createRow(0);for (int i=0;i< biaoti.length;i++){row.createCell(i).setCellValue(biaoti[i]);}String local_path = System.getProperty("user.dir");//获取当前用户的当前工作目录String path = local_path+"/src/main/java/com/excel/xlsx的excel.xlsx";//添加上文件的路径,组成文件的绝对路径File file=new File(path);FileOutputStream fileOutputStream=new FileOutputStream(file);xssfWorkbook.write(fileOutputStream);//通过流的方式写入到文件中中fileOutputStream.close();//使用完成之后要记得关闭这个流}public static void main(String[] args) throws IOException {MyExcel.getXssf();}
}

Workbook

上面的HSSFWorkbook和XSSFWorkbook只能读取对应的文件格式,如果文件格式不对的话就会报错,那我们该如何防止这种问题呢

首先我们分别来看一下这两个类

public class XSSFWorkbook extends POIXMLDocument implements Workbook

public final class HSSFWorkbook extends POIDocument implements Workbook

发现都实现了Workbook接口,那我们就可以在新建WorkBook的时候根据文件的后缀名来判断创建哪种WorkBook

package com.excel;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;/*** 一个EXCEL包含如下几个基础组成* HSSFSheet:表单,通过HSSFWorkbook获取* Row:行,通过HSSFSheet获取* Cell:单元格,通过Row获取* 下标均从0开始* */
public class MyExcel {public static void getXssf(String path) throws IOException {File file=new File(path);FileInputStream inputStream=new FileInputStream(file);Workbook workbook=null;boolean is2003Excel=path.toLowerCase().endsWith("xls")?true:false;if (is2003Excel){workbook= new HSSFWorkbook(inputStream);}else {workbook = new XSSFWorkbook(inputStream);}Sheet sheet=workbook.getSheetAt(0);int firstRowNum=sheet.getFirstRowNum();int lastRowNum=sheet.getLastRowNum();for (int i=firstRowNum;i<=lastRowNum;i++){Row row=sheet.getRow(i);int firstCellNum = row.getFirstCellNum();int lastCellNum = row.getLastCellNum();for (int j=firstCellNum;j<lastCellNum;j++){Cell cell=row.getCell(j);System.out.print(cell.toString()+"\t");}}inputStream.close();//使用完成之后要记得关闭这个流}public static void main(String[] args) throws IOException {String local_path = System.getProperty("user.dir");//获取当前用户的当前工作目录String path = local_path+"/src/main/java/com/excel/xlsx的excel.xlsx";//添加上文件的路径,组成文件的绝对路径MyExcel.getXssf(path);}
}

Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook相关推荐

  1. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

  2. Java读写Excel原来这么简单

    前言 相信现在很多搞后端的同学大部分做的都是后台管理系统,那么管理系统就肯定免不了 Excel 的导出导入功能,今天我们就来介绍一下 Java 如何实现 Excel 的导入导出功能. Java领域解析 ...

  3. Java操作Excel之POI:java读写excel文件以及打印设置

    Java操作Excel之POI:java读写excel文件以及打印设置 POI的jar包下载地址:http://poi.apache.org/download.html 注意:项目中导入poi 4.0 ...

  4. Java读写Excel简介

    Java读写Excel简介 作者:曹祺 Email:Qi.Cao@Sun.Com Blog: http://blogs.sun.com/greysh  本文难度:入门  本文链接: http://de ...

  5. java读写excel表格数据

    java读写excel表格数据 java读写excel表格数据 excel类 package excel;import java.io.File; import jxl.Cell; import jx ...

  6. Java读写Excel之POI超入门(转)

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.Apache POI ...

  7. java读写Excel工具类

    本项目采用maven工程,使用poi技术去读取excel表格. 所需jar包为: <!-- https://mvnrepository.com/artifact/org.apache.poi/p ...

  8. java读写EXCEL之poi

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. Apache POI ...

  9. 手把手教你用java读写excel表格文件(POI,EasyExcel)

    视频链接-我是学习之星我为狂神打call~ [狂神说Java]POI及EasyExcel一小时搞定通俗易懂 想给项目添加一个表格导入导出功能吗? "xxx管理系统"没有导入导出功能 ...

最新文章

  1. 警告!别再使用 TIMESTAMP 作为日期字段~
  2. PDD面试题:new一个对象的过程中发生了什么?
  3. oracle 用mybatis生成主键
  4. kivy 的on_touch_move和on_touch_down
  5. 单核工作法9:消减待办任务
  6. 把列表变成列向量_线性代数的本质11 抽象向量空间
  7. 攻克学习多线程时碰到的难题(zz)
  8. [转] 面向对象编程介绍
  9. 常见掌握类库与工具体系图 艾提拉总结 Atitit 文档资料处理重要类库与工具体系树 Configuration yml xml jsoup  Net apache commons net
  10. python批量下载文件只有1kb_(尚有报错、待完善)从一些网站(网易公开课、电影网站)上批量获得相关视频文件的下载地址,并保存在一个x.txt文件中...
  11. 超详细的QSS样式表入门Demo
  12. caj怎么转word文档
  13. 信息安全管理——仿射密码破解
  14. 天翼云打造国云安全品牌 铸牢企业云上安全防线
  15. 最大值最小值计算机一级,excel怎么找最大值和最小值 excel怎么计算最大值减最小值...
  16. 回答完数据库连接池原理,面试官跪着求我入职他们公司
  17. 报警器——基于arduino
  18. 怎么样把pdf压缩到最小
  19. 从李子柒到张同学,田园乡村成创业热土?
  20. html5 css背景图片满,css background-size与背景图片填满div

热门文章

  1. 互联网 B C端产品对比分析
  2. GET http://localhost:8080/ 404 (Not Found)
  3. 【分治算法】大整数乘法
  4. 华为nova5ipro的优缺点_华为nova5pro的优缺点有哪些?
  5. Java - parseObject
  6. 【Updating】二〇二一流水账
  7. 软件测试之接口测试用例设计,全网独一份
  8. linux c++ 文件修改时间,linux下C获取系统时间的方法
  9. redis的incr和incrby命令
  10. 最长递增子序列 java_最长递增子序列问题---动态规划