fastexcel工具

excel导入到处

  • 很多项目中有读excel的处理,原来有些也没有提出来,这个事情没人做,just so
  • 开源的有不少,代码写的并不好,功能不全面
  • 花了两个小时写了fastexcel工具包

功能建议

excel读取到list中

  • list中map,可以直接序列号成json,入库;类似补充信息,前端直接渲染json格式展示,非结构数据
  • list中为java对象,需要添加注解
public class ExcelHelper {

    /**
     * 读取流 输出map类型[看用于excel转换直接入库json数据]
     * 
     * @param in
     * @return
     */
    public static List<Map<String, String>> read(InputStream in) {

        return ReadUtils.read(in);
    }

    /**
     * 读取流 输出类
     * 
     * @param in
     * @param tClass
     * @param <T>
     * @return
     */
    public static <T> List<T> read(InputStream in, Class<T> tClass) {

        return ReadUtils.read(in, tClass);
    }

  • 小细节很多: 反射加缓存,值的判断,注释功能可多可少慢慢优化
  • 反射setvalue
private static Object getValueByCell(TypeToken typeToken, Cell cell, FieldInfo fieldInfo) throws ParseException {

        // 转包装类型
        Class typeClass
            = typeToken.isPrimitive() ? ClassUtils.primitiveToWrapper(typeToken.getRawType()) : typeToken.getRawType();

        if (typeClass.isAssignableFrom(String.class)) {
            return StringUtils.trimToEmpty(cell.getStringCellValue());
        }

        // 日期
        if (typeClass.isAssignableFrom(Date.class)) {
            // 日期格式
            if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
                return cell.getDateCellValue();
            }
            cell.setCellType(Cell.CELL_TYPE_STRING);
            return DateUtils.parseDate(cell.getStringCellValue(), fieldInfo.getFormat());
        }

        if (typeClass.isAssignableFrom(Boolean.class)) {
            if (Cell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
                return cell.getBooleanCellValue();
            }
            return cell.getStringCellValue().equalsIgnoreCase("true") || (!cell.getStringCellValue().equals("0"));
        }

        if (typeClass.isAssignableFrom(Integer.class)) {

            if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
                return Double.valueOf(cell.getNumericCellValue()).intValue();
            }
            return Integer.valueOf(cell.getStringCellValue());
        }

        if (typeClass.isAssignableFrom(Long.class)) {

            if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
                return Double.valueOf(cell.getNumericCellValue()).longValue();
            }
            return Long.valueOf(cell.getStringCellValue());
        }

        if (typeClass.isAssignableFrom(Double.class)) {

            if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
                return cell.getNumericCellValue();
            }
            return Double.valueOf(cell.getStringCellValue());
        }

        if (typeClass.isAssignableFrom(BigDecimal.class)) {

            if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
                return new BigDecimal(cell.getNumericCellValue());
            }
            return new BigDecimal(cell.getStringCellValue());
        }

        cell.setCellType(Cell.CELL_TYPE_STRING);
        String cellValue = cell.getStringCellValue();
        return StringUtils.trimToEmpty(cellValue);

    }
  • 对象可能是基础类型和包装的,处理下

后期功能,导出到文件,导出到浏览器直接下载等

性能测试

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,279评论 25 709
  • Overview 本章主要介绍各语言中异常声明和处理方式。 Java 篇 分类 在 Java 中异常是种特殊对象,...
    bookislife阅读 4,202评论 0 0
  • 1注意内在:不要被食物包装诱惑,因为包装里面的材料最重要 2精打细算:一次不要买得太多,那样只会白白占用大量冰箱空...
    颖茜阅读 2,860评论 0 1
  • 公元前806年,周厉王少子,周宣王同母弟王子姬友于今天的陕西华县建都立郑国,是为郑桓公。郑国根正苗红,奈何周天子式...
    黑色的雪跟你侃阅读 3,276评论 0 1

友情链接更多精彩内容