java Excel导入工具,半自动

一个导入excel的工具类,半自动,单元格读取部分需要自己手动实现

package com.home.util;

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

import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 导出excel,半自动
 *
 * @param <T>
 */
public abstract class UploadUtil<T> {

    //如果抽象方法中需要操作中间变量可以直接使用
    /**
     * 实体对象
     */
    public T t;
    /**
     * 单元格对象
     */
    public Cell cell;

    /**
     * 处理上传的文件
     *
     * @param in
     * @param fileName
     * @return
     * @throws Exception
     */
    public List<T> getListByExcel(InputStream in, String fileName) throws Exception {
        List<T> list = new ArrayList<>();
        //创建Excel工作薄
        Workbook work = this.getWorkbook(in, fileName);
        if (null == work) {
            throw new Exception("创建Excel工作薄为空!");
        }
        Sheet sheet = null;
        Row row = null;
        for (int i = 0; i < work.getNumberOfSheets(); i++) {
            sheet = work.getSheetAt(i);
            if (sheet == null) {
                continue;
            }
            for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
                row = sheet.getRow(j);
                if (row == null || row.getFirstCellNum() == j) {
                    continue;
                }
                list.add(buiderEntity(row));
            }
        }
        work.close();
        return list;
    }

    public abstract T buiderEntity(Row row);

    /**
     * 判断文件格式
     *
     * @param inStr
     * @param fileName
     * @return
     * @throws Exception
     */
    private Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
        Workbook workbook = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if (".xls".equals(fileType)) {
            workbook = new HSSFWorkbook(inStr);
        } else if (".xlsx".equals(fileType)) {
            workbook = new XSSFWorkbook(inStr);
        } else {
            throw new RuntimeException("格式不对");
        }
        return workbook;
    }

    /**
     * 输入流转file
     *
     * @param ins
     * @param file
     */
    public static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取单元格数据
     *
     * @param cell
     * @return
     */
    public static String getCellContent(Cell cell) {
        return getCellContent(cell, null);
    }

    public static String getCellContent(Cell cell, DecimalFormat df) {
        if (cell == null)
            return "";
        if (df == null) {
            df = new DecimalFormat("####################");
        }
        if (cell.getCellType() == CellType.NUMERIC) {
            double d = cell.getNumericCellValue();
            return df.format(d);
        } else if (cell.getCellType() == CellType.STRING) {
            return cell.getStringCellValue();
        } else if (cell.getCellType() == CellType.FORMULA) {
            return cell.getCellFormula();
        } else if (cell.getCellType() == CellType.BLANK) {
            return "";
        } else if (cell.getCellType() == CellType.BOOLEAN) {
            boolean b = cell.getBooleanCellValue();
            if (b) {
                return "true";
            } else {
                return "false";
            }
        }

        return "";
    }

    public static void main(String[] args) throws Exception {
        UploadUtil<Map<String, Object>> uploadUtil = new UploadUtil<Map<String, Object>>() {
            @Override
            public Map<String, Object> buiderEntity(Row row) {
                Map<String, Object> map = new HashMap<>();
                map.put("param1", UploadUtil.getCellContent(row.getCell(0)));
                map.put("param2", UploadUtil.getCellContent(row.getCell(1)));
                return map;
            }
        };
        File file = new File("/Users/qishi/Desktop/aaaa.xlsx");
        InputStream inputStream = new FileInputStream(file);
        List<Map<String, Object>> list = uploadUtil.getListByExcel(inputStream, "aaaa.xlsx");
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在写bug的路上越走越远

谢谢老板,老板发大财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值