java poi读取excel

POI实现java读取excel

1.下载POI的jar包 , 云盘下载地址: http://pan.baidu.com/s/1jH59hdk

commons-fileupload-1.3.jar
commons-io-2.4.jar
dom4j-1.6.1.jar
poi-3.10-beta2.jar
poi-ooxml-3.10-beta2.jar
poi-ooxml-schemas-3.10-beta2.jar
poi-scratchpad-3.10-beta2.jar
xmlbeans-2.3.0.jar

2.读取excel

 .xlsx  是2010版本excel  用 XSSFWorkbook处理

.xls    是2003版本excel   用 HSSFWorkbook处理

 

复制代码
package utils;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel {

    public static List<List<String>> readExcel(String path) throws IOException {
        if (path.endsWith(".xlsx")) {
            return readXlsx(path);
        } else if (path.endsWith(".xls")) {
            return readXlsx(path);
        } else {
            return null;
        }
    }

    /**
     * Read the Excel 2010
     */
    public static List<List<String>> readXlsx(String path) throws IOException {
        InputStream is = new FileInputStream(path);
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);

        List<List<String>> list = new ArrayList<List<String>>();
        // Read the Sheet
        int numSheets = xssfWorkbook.getNumberOfSheets();// 获取sheet页数
        for (int numSheet = 0; numSheet < 1; numSheet++) {
            XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
            if (xssfSheet == null) {
                continue;
            }
            // Read the Row
            int rowNums = xssfSheet.getLastRowNum();
            for (int rowNum = 0; rowNum <= rowNums; rowNum++) {
                List<String> l = new ArrayList<String>();
                // 获取对应的行数据
                XSSFRow xssfRow = xssfSheet.getRow(rowNum);
                if (xssfRow != null) {
                    // 获取列数
                    int columnNum = xssfRow.getLastCellNum();
                    for (int cloNum = 0; cloNum < columnNum; cloNum++) {
                        l.add(getValue(xssfRow.getCell(cloNum)));
                    }
                    list.add(l);
                }
            }
        }
        return list;
    }

    /**
     * Read the Excel 2003
     */
    public void readXls(String path) throws IOException {
        InputStream is = new FileInputStream(path);
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

        List<List<String>> list = new ArrayList<List<String>>();
        // Read the Sheet
        int numSheets = hssfWorkbook.getNumberOfSheets();// 获取sheet页数
        for (int numSheet = 0; numSheet < 1; numSheet++) {
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }
            // Read the Row
            int rowNums = hssfSheet.getLastRowNum();
            for (int rowNum = 0; rowNum <= rowNums; rowNum++) {
                // 获取对应的行数据
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                List<String> l = new ArrayList<String>();
                if (hssfRow != null) {
                    // 获取列数
                    int columnNum = hssfRow.getLastCellNum();
                    for (int cloNum = 0; cloNum < columnNum; cloNum++) {
                        l.add(getValue(hssfRow.getCell(cloNum)));
                    }
                    list.add(l);
                }
            }
        }
    }

    /**
     * 取值2010excel
     * 
     * @param cell
     * @return
     */
    private static String getValue(XSSFCell cell) {
        if (cell == null) {
            return "";
        }

        String value = "";

        switch (cell.getCellType()) {
        case HSSFCell.CELL_TYPE_STRING:
            value = cell.getStringCellValue();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                Date date = cell.getDateCellValue();
                if (date != null) {
                    value = new SimpleDateFormat("yyyy-MM-dd").format(date);
                } else {
                    value = "";
                }
            } else {
                value = new DecimalFormat("0").format(cell.getNumericCellValue());
            }
            break;
        case HSSFCell.CELL_TYPE_FORMULA:
            // 导入时如果为公式生成的数据则无值
            if (!cell.getStringCellValue().equals("")) {
                value = cell.getStringCellValue();
            } else {
                value = cell.getNumericCellValue() + "";
            }
            break;
        case HSSFCell.CELL_TYPE_BLANK:
            break;
        case HSSFCell.CELL_TYPE_ERROR:
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            value = (cell.getBooleanCellValue() == true ? "Y" : "N");
            break;
        default:
            value = "";
        }
        return value.trim();
    }

    /**
     * 取值2003excel
     * 
     * @param cell
     * @return
     */
    private String getValue(HSSFCell cell) {
        if (cell == null) {
            return "";
        }

        String value = "";

        switch (cell.getCellType()) {
        case HSSFCell.CELL_TYPE_STRING:
            value = cell.getStringCellValue();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                Date date = cell.getDateCellValue();
                if (date != null) {
                    value = new SimpleDateFormat("yyyy-MM-dd").format(date);
                } else {
                    value = "";
                }
            } else {
                value = new DecimalFormat("0").format(cell.getNumericCellValue());
            }
            break;
        case HSSFCell.CELL_TYPE_FORMULA:
            // 导入时如果为公式生成的数据则无值
            if (!cell.getStringCellValue().equals("")) {
                value = cell.getStringCellValue();
            } else {
                value = cell.getNumericCellValue() + "";
            }
            break;
        case HSSFCell.CELL_TYPE_BLANK:
            break;
        case HSSFCell.CELL_TYPE_ERROR:
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            value = (cell.getBooleanCellValue() == true ? "Y" : "N");
            break;
        default:
            value = "";
        }
        return value.trim();
    }
}
ReadExcel.java
复制代码

 

posted @   亲爱的阿道君  阅读(287)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示