fastjson处理excel表单数据工具类

package com.dzg.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dzg.excel2json.ExcelToJsonReservoir;
import org.apache.poi.ss.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

public class Excel2JsonUtil {

    private final static Logger logger = LoggerFactory.getLogger(ExcelToJsonReservoir.class);
    private static FileInputStream inp = null;

    /**
     *根据excel文件名(后缀名为.xlsx),将其转化为一个JSON数组
     *
     * JSON数组中的每一元素为对应表格中的一行数据
     *
     * 表格中的数字数据(如年龄、体重等)默认都被转化为了double类型,要获取整型数据自行处理即可(Integer对象进行处理)
     * @param fileName
     */
    public static JSONArray excelToJson(String fileName){
        JSONObject jsonObject = null;
        try {
            inp = new FileInputStream(fileName);
            Workbook workbook = WorkbookFactory.create(inp);
            //获取sheet数
            int sheetNum = workbook.getNumberOfSheets();
            jsonObject = new JSONObject();
            for (int s = 0; s < sheetNum; s++) {
                // Get the Sheet of s.
                Sheet sheet = workbook.getSheetAt(s);
                //获取最大行数
                int rownum = sheet.getPhysicalNumberOfRows();
                if (rownum <= 1) {
                    continue;
                }
                //获取第一行
                Row row1 = sheet.getRow(0);
                //获取最大列数
                int colnum = row1.getPhysicalNumberOfCells();
                JSONArray jsonArray = new JSONArray();
                for (int i = 1; i < rownum; i++) {
                    Row row = sheet.getRow(i);
                    if (row != null) {
//                    List<Object> list = new ArrayList<>();
                        JSONObject rowObj = new JSONObject();
                        //循环列
                        for (int j = 0; j < colnum; j++) {
                            Cell cellData = row.getCell(j);
                            if (cellData != null) {
                                //判断cell类型
                                switch (cellData.getCellType()) {
                                    //cell为double数值类型
                                    case Cell.CELL_TYPE_NUMERIC: {
                                        /*if (j == 0 || j ==1 || j ==2){
                                            rowObj.put(row1.getCell(j).getStringCellValue(), new Double(cellData.getNumericCellValue()).intValue());
                                        }*/
                                        rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getNumericCellValue());
                                        break;
                                    }
                                    case Cell.CELL_TYPE_FORMULA: {
                                        //判断cell是否为日期格式
                                        if (DateUtil.isCellDateFormatted(cellData)) {
                                            //转换为日期格式YYYY-mm-dd
                                            rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getDateCellValue());
                                        } else {
                                            //数字
                                            rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getNumericCellValue());
                                        }
                                        break;
                                    }
                                    case Cell.CELL_TYPE_STRING: {
                                        rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getStringCellValue());
                                        break;
                                    }
                                    default:
                                        //默认为空值
                                        rowObj.put(row1.getCell(j).getStringCellValue(), "");
                                }
                            } else {
                                //某一行的第j列为空
                                rowObj.put(row1.getCell(j).getStringCellValue(), "");
                            }
                        }
                        jsonArray.add(rowObj);
//                        num++;
                    }
                }
//                logger.info(jsonArray.toJSONString());
                jsonObject.put(sheet.getSheetName(), jsonArray);
                return jsonArray;
            }
//            logger.info(jsonObject.toJSONString());
        } catch (Exception e) {
            e.printStackTrace();
        }
//        return jsonObject;
        return null;
    }

    /**
     * 根据关系表,获取对应的一对多映射关系(一个Target_Fid对应多个JOIN_FID)
     *
     * @param fileName
     * @return
     */
    public static Map<Integer, List<Integer>> getOne2ManyRelationship(String fileName) {

        JSONObject rowJsonObject = null;
        JSONArray jsonArray = Excel2JsonUtil.excelToJson(fileName);
        Map<Integer, List<Integer>> tempMap = new HashMap<>();

        if (jsonArray == null){
            return null;
        }
        for (Object obj : jsonArray) {
            rowJsonObject = (JSONObject) obj;

            if(NumberUtil.double2Int((Double) rowJsonObject.get("Join_Count")) == 1);{

                //在这里获取一对多中"多"的一方对应的数据
                int target_fid = new Double((Double) rowJsonObject.get("TARGET_FID")).intValue();
                int join_fid = new Double((Double) rowJsonObject.get("JOIN_FID")).intValue();
                //判断当前Map中是否已经包含target_fid
                if(tempMap.containsKey(target_fid)){
                    //包含的话根据键值获取对应的List将join_id加进去
                    tempMap.get(target_fid).add(join_fid);
                }else{
                    //不包含,则先将对应的join_id添加到一个List中
                    ArrayList<Integer> list= new ArrayList<>();
                    list.add(join_fid);
                    tempMap.put(target_fid,list);
                }

            }
        }
        return tempMap;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值