栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook

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;


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();
        //获取最后一行的下标
        
        for (int i=firstRowNum;i<=lastRowNum;i++){
            Row row=hssfSheet1.getRow(i);
            //根据下标,获取对应行的数据
            int firstCellNum=row.getFirstCellNum();
            //获取对应行的第一个cell的下标
            int lastCellNum=row.getLastCellNum();
            //获取对应行的最后一个cell的下标
            
            List list=new ArrayList<>();
            //新建一个list用来存放数据
            for (int j=firstCellNum;j 

结果

姓名	年龄	职业	
张三	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;


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();
        //获取最后一行的下标
        
        for (int i=firstRowNum;i<=lastRowNum;i++){
            Row row=hssfSheet1.getRow(i);
            //根据下标,获取对应行的数据
            int firstCellNum=row.getFirstCellNum();
            //获取对应行的第一个cell的下标
            int lastCellNum=row.getLastCellNum();
            //获取对应行的最后一个cell的下标
            
            List list=new ArrayList<>();
            //新建一个list用来存放数据
            for (int j=firstCellNum;j 

结果

姓名	年龄	职业	
张三	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;


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;


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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号