excel导入导出

1 篇文章 0 订阅
1 篇文章 0 订阅
这篇博客分享了一个封装好的Java Excel导入导出工具类,能够方便地处理数据的导出和导入。导出时,只需调用`excelDto2Excel()`方法,导入则通过`importExcel()`方法完成。工具支持自动处理实体类与Excel数据的映射,简化了因字段变化带来的代码修改工作。注意,使用时实体类需有无参构造函数。
摘要由CSDN通过智能技术生成

工具链接icon-default.png?t=M276https://github.com/Teach-fish-swim/excel-import-export

开发过excel的导入导出功能的小伙伴们都知道,我们每次导出到excel时,总会要写相应的实体类,而一旦excel的数据字段发生变化后,我们的实体类也要跟着去改变,最主要的是要去更改相关的工具类,这就很痛苦,并且一个地方改错了还会影响其他的地方运行,我这里推荐一个自己封装的excel导入导出的工具类

1.导出

1.1 导出截图

 

导出只需要调用  ExcelDto2Excel.excelDto2Excel()方法即可

1.2 详情分析:

/**
 * @param dataEntryList the entry of data about export   not null
 * @param filePath      export path         had default value
 * @param fileName      excel name          not null
 * @param sheetName      sheet name         had default value
 * @param <T>
 *
 * @throws Exception
 */
public static <T> void excelDto2Excel(List<T> dataEntryList, String filePath, String fileName,String sheetName) throws Exception {
    // 获取总列数
    int CountColumnNum = getAllCount(dataEntryList);
    // 创建Excel文档
    HSSFWorkbook hwb = new HSSFWorkbook();

    // sheet 对应一个工作页
    if(sheetName==null||"".equals(sheetName))
        sheetName=SHEET_NAME;

    HSSFSheet sheet = hwb.createSheet(sheetName);
    HSSFRow firstrow = sheet.createRow(0); // 下标为0的行开始
    HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
    String[] names = createColumn(CountColumnNum, dataEntryList.get(0).getClass());
    for (int j = 0; j < CountColumnNum; j++) {
        firstcell[j] = firstrow.createCell(j);
        firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
    }
    for (int i = 0; i < dataEntryList.size(); i++) {
        // 创建一行
        HSSFRow row = sheet.createRow(i + 1);

        Object o = dataEntryList.get(i);


        parseData(o, CountColumnNum, row, names);
    }
    // 创建文件输出流,准备输出电子表格
    boolean exists = new File(filePath).exists();
    if(!exists){
        boolean mkdir = new File(DEFAULT_PATH).mkdirs();
        if(!mkdir)
            throw new IOException("excel存储路径创建失败,请检查是否已经存在 '"+DEFAULT_PATH+"' 文件夹");
        filePath=DEFAULT_PATH;
    }
    OutputStream out = new FileOutputStream(filePath + fileName + ".xls");
    hwb.write(out);
    out.close();
    log.info("数据导出成功");
    if(!exists)
        log.info("您的excel存放的位置:"+DEFAULT_PATH);


}
 

2 导入

2.1 导入截图

 导出只需要调用  ExcelDto2Excel.importExcel()方法即可

2.2 详情代码

/**
 *
 * @param filePath   文件所在位置
 * @param dataEntry  实体类(需要有一个无参构造,且要满足驼峰命名)
 * @param isReceiveEmpty  是否接受文件里面的空值
 * @param <T>
 * @return
 * @throws Exception  若isReceiveEmpty为 false,又出现空值,则会报数据无法接收,
 * 数据类型不对,会报类型对应不上,字段数量不一致会报错
 */
public static <T> List<T> importExcel(String filePath, T dataEntry,boolean isReceiveEmpty) throws Exception {
    //校验路径与实体类是否存在
    check(filePath, dataEntry);

    //获取实体类字段
    Map<String, String> columns = getColumns(dataEntry);

    //获取excel中的字段即数据
    FileInputStream fileIn = new FileInputStream(filePath);

    //判断是xls还是xlsx
    Sheet sht0=null;
    if("xls".equals(filePath.split("\\.")[1])){
        HSSFWorkbook wb0 = new HSSFWorkbook(fileIn);//针对xls
        sht0 = wb0.getSheetAt(0);
    }else{
        XSSFWorkbook wb0=new XSSFWorkbook(fileIn);
        sht0 = wb0.getSheetAt(0);
    }



    String[] orderColumn = isColumnSame(columns, sht0.getRow(0));
    List<T> entryList = new ArrayList<T>();
    importData2Entry(entryList, sht0, orderColumn, dataEntry,isReceiveEmpty);
    fileIn.close();
    log.info("excel导入完成");
    return entryList;
}

注意事项:

使用时确保实体类有无参构造函数

工具链接icon-default.png?t=M276https://github.com/Teach-fish-swim/excel-import-export

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值