上传excel表格解析数据

1.前端

  <form action="/xlsx/upload" enctype="multipart/form-data" method="post">
        <input type="file" name="file">
        <input type="submit" value="上传">
    </form>

2.工具类

package com.ju.utils;


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

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

/**
 * 读取Excel
 *
 * @author zengwendong
 */
public class ReadExcelUtils {




    /**
     *
     * 根据Cell类型设置数据
     * @param cell
     * @return
     * @author zengwendong
     */
    private static Object getCellFormatValue(Cell cell) {
        Object cellvalue = "";
        if (cell != null) {
            // 判断当前Cell的Type
            switch (cell.getCellType()) {
                case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERIC
                case Cell.CELL_TYPE_FORMULA: {
                    // 判断当前的cell是否为Date
                    if (DateUtil.isCellDateFormatted(cell)) {
                        // 如果是Date类型则,转化为Data格式
                        Date date = cell.getDateCellValue();
                        cellvalue = date;
                    } else {// 如果是纯数字
                        // 取得当前Cell的数值
                        cellvalue = cell.getNumericCellValue();
                    }
                    break;
                }
                case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING
                    // 取得当前的Cell字符串
                    cellvalue = cell.getRichStringCellValue().getString();
                    break;
                default:// 默认的Cell值
                    cellvalue = "";
            }
        } else {
            cellvalue = "";
        }
        return cellvalue;
    }

    public static List<Map<String,Object>> getData(MultipartFile file){
        Workbook wb = null;
        //获取后缀名
        String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        try {
            InputStream is = file.getInputStream();
            if(".xls".equals(ext)){
                wb = new HSSFWorkbook(is);
            }else if(".xlsx".equals(ext)){
                wb = new XSSFWorkbook(is);
            }else{
                wb=null;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        //获取第一个sheet
        Sheet sheetOne = wb.getSheetAt(0);
        //获取第一行数据(主要包含字段名称)
        Row rowOne = sheetOne.getRow(0);
        // 标题总列数
        int colNum = rowOne.getLastCellNum();
        // 得到总行数
        int rowNum = sheetOne.getLastRowNum();

        List<Map<String,Object>> list = new ArrayList<>();
        for (int i = 1; i < rowNum ; i++) {
            //获得当前遍历行的行数据
            Row thisrow = sheetOne.getRow(i);
            Map<String,Object> map = new HashMap<>();
            for (int j = 0; j < colNum ; j++) {
                //key为第一行的标题内容
                map.put(rowOne.getCell(j).getStringCellValue(),getCellFormatValue(thisrow.getCell(j)));
            }
            list.add(map);
        }
        return list;
    }
}

3.实例

响应数据为 List<Map<String,Object>> mapkey为字段名 value 为值

猜你喜欢

转载自blog.csdn.net/jd_gogogo/article/details/107339374
今日推荐