Java导入Excel表格数据

java导入Excel表格数据

1.首先导入两个依赖jar包

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>

2.需要编写一个工具类

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

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ImportExcel {
    // abc.xls
    public static boolean isXls(String fileName){
        // (?i)忽略大小写
        if(fileName.matches("^.+\\.(?i)(xls)$")){
            return true;
        }else if(fileName.matches("^.+\\.(?i)(xlsx)$")){
            return false;
        }else{
            throw new RuntimeException("格式不对");
        }
    }

    public static List<Map<String, Object>> readExcel(String fileName, InputStream inputStream) throws Exception{
        
        boolean ret = isXls(fileName);
        Workbook workbook = null;
        // 根据后缀创建不同的对象
        if(ret){
            workbook = new HSSFWorkbook(inputStream);
        }else{
            workbook = new XSSFWorkbook(inputStream);
        }
        Sheet sheet = workbook.getSheetAt(0);
        // 得到标题行
        Row titleRow = sheet.getRow(0);
        
        int lastRowNum = sheet.getLastRowNum();
        int lastCellNum = titleRow.getLastCellNum();
        
        List<Map<String, Object>> list = new ArrayList<>();
        
        for(int i = 1; i <= lastRowNum; i++ ){
            Map<String, Object> map = new HashMap<>();
            Row row = sheet.getRow(i);
            for(int j = 0; j < lastCellNum; j++){
                // 得到列名
                String key = titleRow.getCell(j).getStringCellValue();
                Cell cell = row.getCell(j);
                cell.setCellType(CellType.STRING);
                
                map.put(key, cell.getStringCellValue());
            }
            list.add(map);
        }
        workbook.close();
        return list;
    }

    public static List<Map<String, Object>> readExcel(String fileName, InputStream inputStream,Map<String,String> colmus) throws Exception{

        boolean ret = isXls(fileName);
        Workbook workbook = null;
        // 根据后缀创建不同的对象
        if(ret){
            workbook = new HSSFWorkbook(inputStream);
        }else{
            workbook = new XSSFWorkbook(inputStream);
        }
        Sheet sheet = workbook.getSheetAt(0);
        // 得到标题行
        Row titleRow = sheet.getRow(0);

        int lastRowNum = sheet.getLastRowNum();
        int lastCellNum = titleRow.getLastCellNum();

        List<Map<String, Object>> list = new ArrayList<>();

        for(int i = 1; i <= lastRowNum; i++ ){
            Map<String, Object> map = new HashMap<>();
            Row row = sheet.getRow(i);
            for(int j = 0; j < lastCellNum; j++){
                // 得到列名
                String key = titleRow.getCell(j).getStringCellValue();
                Cell cell = row.getCell(j);
                cell.setCellType(CellType.STRING);

                if(colmus.get(key) != null && !"".equals(colmus.get(key))){
                    key = colmus.get(key);
                }
                map.put(key, cell.getStringCellValue());
            }
            list.add(map);
        }
        workbook.close();
        return list;

    }
}

3.需要一个Student对象,读取Excel表格数据后为json格式,需要用json格式转换为Student对象

public class Student {
    private int studentid;//学号id
    private String name;//姓名
    private String sex;//性别

    public int getStudentid() {
        return studentid;
    }

    public void setStudentid(int studentid) {
        this.studentid = studentid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }


}

3.编写一个demo测试类

import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ibeetl.admin.console.tool.ImportExcel;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;

public class demo {
    public static void main(String[] args){
        importExcel("D:\\测试.xls");
    }


    public static void importExcel(String fileName){
        try {

            // 获取上传文件的输入流
            InputStream inputStream = new FileInputStream(fileName);
            Map<String,String> colmus = new HashMap<>();
            colmus.put("学号","studentid");//读取Excel数据后是json格式的,然后在json格式转换为对象,因此Excel表格里面中文字段所以要通过这里更改json的key
            colmus.put("姓名","name");
            colmus.put("性别","sex");
            // 调用工具类中方法,读取excel文件中数据
            List<Map<String, Object>> sourceList = ImportExcel.readExcel(fileName, inputStream,colmus);
            ObjectMapper objMapper = new ObjectMapper();
            String infos = objMapper.writeValueAsString(sourceList);
            //json转换对象
            List<Student> list = JSONArray.parseArray(infos, Student.class);

            for (int i = 0; i< list.size();i++){
                System.out.print("姓名:");
                System.out.println(list.get(i).getName());
                System.out.print("性别:");
                System.out.println(list.get(i).getSex());
                System.out.print("学号:");
                System.out.println(list.get(i).getStudentid());
                //然后在这里编写插入数据库的操作
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
            }


4.然后在给你们看看我的Excel表格里面的内容
在这里插入图片描述
5.输出结果:
在这里插入图片描述

发布了6 篇原创文章 · 获赞 0 · 访问量 268

猜你喜欢

转载自blog.csdn.net/qq_15149103/article/details/104709022
今日推荐