博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POI读取Excel(xls、xlsx均可以)——(四)
阅读量:4954 次
发布时间:2019-06-12

本文共 12144 字,大约阅读时间需要 40 分钟。

 

maven构建的项目-->pom.xml文件

  • eclipse提供Dependencies直接添加依赖jar包的工具:直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包:
  1. poi提供microsoft office旧版本支持,eg .xls Excel  (2003-2007的版本)
    1. poi-ooxml提供microsoft office新版本支持,eg .xlsx Excel  (2007以后的版本)
  • 或者手动修改pom.xml,在添加jar包依赖的地方加入
org.apache.poi
poi-ooxml
3.9

或者:

org.apache.poi
poi
3.9

 

 

注意: HSSFWorkbook是97-03版本的xls版本,XSSFWorkbook是07版本的xlsx

 

  • HSSFXXX读取03-07版本的xls的excel:  (注意引入的是POI的包,如果读取的是xlsx后缀的excel会报错)
import java.io.FileInputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;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.Workbook;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;@SuppressWarnings("all")/** * java读取低版本的Excel(03版本的Excel) *  * @author: qlq * @date : 2018年7月4日下午3:21:50 */public class POIRead03VersionExcel {    public static void main(String[] args) throws IOException {        try {            // 获取一个工作簿            Workbook workbook = new HSSFWorkbook(new FileInputStream("G:\\tmpfile\\excel\\user.xls"));            // 获取一个工作表两种方式            // HSSFSheet sheet = workbook.getSheet("sheet0");            // 获取工作表的第二种方式            HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);            int firstRow = 0;            // 获取sheet的最后一行            int lastRow = sheet.getLastRowNum();            for (int i = firstRow; i <= lastRow; i++) {                HSSFRow row = sheet.getRow(i);                int lastCol = row.getLastCellNum();                for (int j = 0; j < lastCol; j++) {                    HSSFCell cell = row.getCell(j);                    cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理                    String value = cell.getStringCellValue();                    System.out.print(value + "  ");                }                System.out.println();            }        } catch (IOException e) {            e.printStackTrace();        }    }}

结果:

 

 

 

  • XSSFXXX读取07年以后高版本的Excel的方法:(注意需要引入的是poi-ooxml包,如果读取03版本的xls的excel会报错)

 需要的jar包:

import java.io.IOException;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;@SuppressWarnings("all")/** * java读取高版本的excel(xlsx后缀的excel) *  * @author: qlq * @date : 2018年7月4日下午3:21:50 */public class POIRead07VersionExcel {    public static void main(String[] args) throws IOException {        try {            // 获取一个工作簿            // 第一种创建XSSFWorkbook的方法:            /*             * File file = new             * File("C:/Users/liqiang/Desktop/考核/系统管理/导入excel模板/user.xlsx");             * XSSFWorkbook workbook = new             * XSSFWorkbook(FileUtils.openInputStream(file));             */            // 第二种创建XSSFWorkbook的方法            Workbook workbook = new XSSFWorkbook("G:\\tmpfile\\excel\\user.xlsx");                        // 获取一个工作表两种方式            // HSSFSheet sheet = workbook.getSheet("sheet0");            // 获取工作表的第二种方式            XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0);            int firstRow = 0;            // 获取sheet的最后一行            int lastRow = sheet.getLastRowNum();            for (int i = firstRow; i <= lastRow; i++) {                XSSFRow row = sheet.getRow(i);                int lastCol = row.getLastCellNum();                for (int j = 0; j < lastCol; j++) {                    XSSFCell cell = row.getCell(j);                    cell.setCellType(Cell.CELL_TYPE_STRING);// 强制将读取的数据作为String处理,否则读取数字会报错                    String value = cell.getStringCellValue();                    System.out.print(value + "  ");                }                System.out.println();            }        } catch (IOException e) {            e.printStackTrace();        }    }}

 

结果:

 

 

 

 

  • 解决上述问题,编写一个方法可以读取07或者03版本的Excel的方法:

第一种方法:

  思路:根据文件的后缀是xls还是xlsx来判断读取调用读取03还是07版本的方法。

import java.io.FileInputStream;import java.io.IOException;import java.nio.file.FileAlreadyExistsException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;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.Workbook;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;@SuppressWarnings("all")/** * java读取03和07版本的excel的方法 *  * @author: qlq * @date : 2018年7月4日下午3:21:50 */public class POIRead07And03VersionExcel {    public static void main(String[] args) throws IOException {        String filePath = "G:\\tmpfile\\excel\\user.xls";        if ("xlsx".equals(getFileExtendsName(filePath))) {            readXlsxExcel(filePath);        }        if ("xls".equals(getFileExtendsName(filePath))) {            readXlsExcel(filePath);        }    }    /**     * 读取excel的拓展名     *      * @param fileName     * @return     */    public static String getFileExtendsName(String fileName) {        if (fileName == null) {            return null;        }        return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());    }    /**     * 读取03-07年的Excel的方法     *      * @param filePath     *            文件名字     */    private static void readXlsExcel(String filePath) {        try {            // 获取一个工作簿            Workbook workbook = new HSSFWorkbook(new FileInputStream(filePath));            // 获取一个工作表两种方式            // HSSFSheet sheet = workbook.getSheet("sheet0");            // 获取工作表的第二种方式            HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);            int firstRow = 0;            // 获取sheet的最后一行            int lastRow = sheet.getLastRowNum();            for (int i = firstRow; i <= lastRow; i++) {                HSSFRow row = sheet.getRow(i);                int lastCol = row.getLastCellNum();                for (int j = 0; j < lastCol; j++) {                    HSSFCell cell = row.getCell(j);                    cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理                    String value = cell.getStringCellValue();                    System.out.print(value + "  ");                }                System.out.println();            }        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 读取07年以后的Excel的方法     *      * @param filePath     *            文件名字     */    private static void readXlsxExcel(String filePath) {        try {            // 获取一个工作簿            // 第一种创建XSSFWorkbook的方法:            /*             * File file = new             * File("C:/Users/liqiang/Desktop/考核/系统管理/导入excel模板/user.xlsx");             * XSSFWorkbook workbook = new             * XSSFWorkbook(FileUtils.openInputStream(file));             */            // 第二种创建XSSFWorkbook的方法            Workbook workbook = new XSSFWorkbook(filePath);            // 获取一个工作表两种方式            // HSSFSheet sheet = workbook.getSheet("sheet0");            // 获取工作表的第二种方式            XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0);            int firstRow = 0;            // 获取sheet的最后一行            int lastRow = sheet.getLastRowNum();            for (int i = firstRow; i <= lastRow; i++) {                XSSFRow row = sheet.getRow(i);                int lastCol = row.getLastCellNum();                for (int j = 0; j < lastCol; j++) {                    XSSFCell cell = row.getCell(j);                    cell.setCellType(Cell.CELL_TYPE_STRING);// 强制将读取的数据作为String处理,否则读取数字会报错                    String value = cell.getStringCellValue();                    System.out.print(value + "  ");                }                System.out.println();            }        } catch (IOException e) {            e.printStackTrace();        }    }}

 

第二种方法:(重要------  一般用这种)

  思路:使用其父类对象,对Workbook进行try..catch 如果创建03版本的HSSF...报错就创建07版本的XSSF...。这也是一种重要的思路,用父类接受对象的实例。

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;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.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;@SuppressWarnings("all")/** * 读取通用Excel的第二种方法 *  * @author: qlq * @date : 2018年7月4日下午5:42:02 */public class POIRead07And03VersionExcel2 {    public static void main(String[] args) throws IOException {        File file = new File("G:/tmpfile/excel/user.xls");        // 1.创建WorkBook        Workbook workbook = null;        try {            workbook = new XSSFWorkbook(file);        } catch (Exception e) {            workbook = new HSSFWorkbook(new FileInputStream(file));        }        // 获取一个工作表两种方式        // HSSFSheet sheet = workbook.getSheet("sheet0");        // 获取工作表的第二种方式        Sheet sheet =  workbook.getSheetAt(0);        int firstRow = 0;        // 获取sheet的最后一行        int lastRow = sheet.getLastRowNum();        for (int i = firstRow; i <= lastRow; i++) {            Row row = sheet.getRow(i);            int lastCol = row.getLastCellNum();            for (int j = 0; j < lastCol; j++) {                Cell cell = row.getCell(j);                cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理                String value = cell.getStringCellValue();                System.out.print(value + "  ");            }            System.out.println();        }    }}

 

 

补充:

1.如果读取的是数字,想作为字符串处理需要强制单元格读取的时候以字符串处理:

cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理                    String value = cell.getStringCellValue();

 

补充:读取行与列的时候也可以用迭代器遍历的方式进行读取(建议行用迭代器读取,列还用原来的方式读取)

package cn.xm.exam.test;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.Iterator;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;@SuppressWarnings("all")/** * 读取通用Excel的第二种方法 *  * @author: qlq * @date : 2018年7月4日下午5:42:02 */public class POIRead07And03VersionExcel3 {    public static void main(String[] args) throws IOException {        File file = new File("C:\\Users\\Administrator\\Desktop\\test.xlsx");        // 1.创建WorkBook        Workbook workbook = null;        try {            workbook = new XSSFWorkbook(file);        } catch (Exception e) {            workbook = new HSSFWorkbook(new FileInputStream(file));        }        // 获取一个工作表两种方式        // HSSFSheet sheet = workbook.getSheet("sheet0");        // 获取工作表的第二种方式        Sheet sheet = workbook.getSheetAt(0);        // 标记行号        int i = 0;        for (Iterator
iterator = sheet.rowIterator(); iterator.hasNext();) { Row row = iterator.next(); if (row == null) { continue; } i++; if (i <= 1) { System.out.println("跳过行头"); continue; } for (Iterator
cellIterator = row.cellIterator(); cellIterator.hasNext();) { Cell cell = cellIterator.next(); cell.setCellType(Cell.CELL_TYPE_STRING);// 强制将读取的数据作为String处理,否则读取数字会报错 String stringCellValue = cell.getStringCellValue(); System.out.print(stringCellValue + "\t"); } System.out.println(); } }}

 

原来excel内容:

 

读取结果:

 

转载于:https://www.cnblogs.com/qlqwjy/p/7271634.html

你可能感兴趣的文章
jpg图片在IE6、IE7和IE8下不显示解决办法
查看>>
delphi之模糊找图
查看>>
Javascript模块化编程的写法
查看>>
大华门禁SDK二次开发(二)-SignalR应用
查看>>
oracle 使用job定时自动重置sequence
查看>>
集成百度推送
查看>>
在项目中加入其他样式
查看>>
在使用Kettle的集群排序中 Carte的设定——(基于Windows)
查看>>
【原】iOS中KVC和KVO的区别
查看>>
OMAPL138学习----DSPLINK DEMO解析之SCALE
查看>>
IoC的基本概念
查看>>
restframework CBV试图的4种方式
查看>>
大图居中,以1920px为例
查看>>
Python3 图片转字符画
查看>>
[C陷阱和缺陷] 第7章 可移植性缺陷
查看>>
人需要治愈
查看>>
linux中configure文件默认执行结果所在位置
查看>>
Spring MVC例子
查看>>
jmeter 断言
查看>>
玩玩小爬虫——抓取时的几个小细节
查看>>