Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook 您所在的位置:网站首页 poi是什么文件格式 Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook

Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook

2023-10-29 05:54| 来源: 网络整理| 查看: 265

Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook 引入maven依赖 org.apache.poi poi 3.17 org.apache.poi poi-ooxml 3.17 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循环为 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循环为 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 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 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); } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有