Java使用poi框架实现导入EXCEL文件

Java使用poi框架实现导入EXCEL文件

在Java开发工作中有很多地方用到excel导入功能,整理一下这方面的使用,以后有更好的方法会持续更新
本文章仅供产考,如有不符,欢迎留言指出。

思路分析:
1、首先获取文件并判断文件类型(.xls/.xlsx)
2、读取sheet表
3、动态读取每行每列

导入依赖
		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>
解析Excel
package Excel;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javax.sound.midi.Soundbank;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.*;

public class ExcelXml {
    public static void main(String[] args) {
        Workbook workbook=null;
        Sheet sheet=null;//工作表
        Row row=null;//行数
        List<Map<String,String>> list=null;
        String cellDate=null;//接收每个单元格的值
        String filePath="C:\\Users\\Loner\\Desktop\\Retail_provision_20190130.xlsx";//文件路径
        //String colums[]={"name","age","score"};//手动添加表头,改过后可以动态获取表头
        workbook=readExcel(filePath);
        if(workbook!=null){
            list=new ArrayList<Map<String,String>>();
            sheet=workbook.getSheetAt(0);//获取第一个sheet表格
            int rownum=sheet.getPhysicalNumberOfRows();//获取最大行数
            row=sheet.getRow(0);
            int column=row.getPhysicalNumberOfCells();//获取最大列数
            String[] cols=new String[column];
            for (int i = 0; i < rownum; i++) {
                Map<String,String> map=new LinkedHashMap<String,String>();
                row=sheet.getRow(i);
                if(row!=null){
                    for (int i1 = 0; i1 < column; i1++) {
                        cellDate=(String)getCellFormatValue(row.getCell(i1));//获取每个单元格的值
                        if(i==0){
                            cols[i1]=cellDate;//如果是第一行则获取表头
                        }else{
                            map.put(cols[i1],cellDate);//如果不是第一行则存入Map
                        }
                    }
                }else{
                    break;
                }
                list.add(map);
            }
        }
        for (Map<String,String> map : list){
            for (Map.Entry<String,String> entry : map.entrySet()){
                System.out.print(entry.getKey()+":"+entry.getValue()+",");
            }
        }
    }
	//读取Excel文件 filePath:文件路径
	public static Workbook readExcel(String filePath){
        Workbook workbook=null;
        if(filePath==null){
            return null;
        }
        //截取"."之后的字符
        String extString=filePath.substring(filePath.lastIndexOf("."));
        InputStream input=null;
        try {
            input=new FileInputStream(filePath);//输入流读取文件
            //根据不同的后缀调用不同解析方法
            if(".xls".equals(extString)){
                return workbook= new HSSFWorkbook(input);
            }else if(".xlsx".equals(extString)){
                 workbook=new XSSFWorkbook(input);
                return workbook;
            }else {
                return workbook=null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return workbook;
    }
    
	//格式化单元格类型
	//这里使用的3.14版本的poi,高版本的poi一下方法可能会过时,如使用高版本建议更换以下方法
    public static Object getCellFormatValue(Cell cell){
        Object cellValue=null;
        if(cell!=null){
            switch (cell.getCellType()){
                case 0:{
                    cellValue=String.valueOf(cell.getNumericCellValue());
                    break;
                }
                case 2:{
                    if(DateUtil.isCellDateFormatted(cell)){
                        cellValue=cell.getDateCellValue();
                    }else{
                        cellValue=String.valueOf(cell.getNumericCellValue());
                    }
                    break;
                }
                case 1:{
                    cellValue=cell.getRichStringCellValue().getString();
                    break;
                }
                default:
                    cellValue="";
            }
        }else {
            cellValue="";
        }
        return cellValue;
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值