栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

六.实战——Excel表格的导入和导出

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

六.实战——Excel表格的导入和导出

总结:
  1. 导出:写操作,将数据库中的内容写入到excel表格中。
  2. 导入:读操作,将excel表格中的内容读出来,插入到数据库中,一般都是先将excel表格中的内容使用流,读到集合(list)中,然后再对集合进行遍历插入。
一. easyExcel 1. 写(导出) (1)pom依赖


    
    
        com.alibaba
        fastjson
        1.2.62
    
    
    
        com.alibaba
        easyexcel
        2.2.0-beta2
    
    
    
        joda-time
        joda-time
        2.10.1
    
    
    
        junit
        junit
        4.12
    
    
        org.projectlombok
        lombok
        RELEASE
        compile
    

(2)实体类(模板类)

字段上加注解就行:
@ExcelProperty("表中字段名")
@ExcelIgnore:要忽略的字段。

(3)业务层进行写操作
EasyExcel.write(文件名, 模板类.class).sheet("表名").doWrite(list集合);
2. 读(导入) (1)监听器
// 1.继承AnalysisEventListener
public class DemoDataListener extends AnalysisEventListener {
	// 2.一行一行的读取内容(list集合),但是不读表头。
	@Override
	public void invoke(DemoData data, AnalysisContext context) {
		//一般在这里进行导入集合操作(在项目中,一般所有业务操作,都在这个方法中进行)
	}
	// 3.读表头内容
	@Override
    public void invokeHeadMap(Map headMap, AnalysisContext context) {
    	//将表头信息导入集合(实际中不需要)
    }
    // 4.所有都读取完了,执行这个方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
    	//一般在这里进行插入数据库操作(当然这只是我个人认为的,在尚医通项目和在线教育项目中,这个项目都是空的,插入数据库的操作在invoke()方法中进行。而且invokeHeadMap方法也用不到,因为不需要读取表头信息,读取时导入,数据库中有字段(表头),不需要再导)
    	//狂神讲的课中用到了这个方法,可以具体去看一下他的笔记
    }
}
(2)读
//EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
EasyExcel.read(文件名, 模板类.class, 监听器对象).sheet().doRead();

更多详细信息,可以看尚医通的笔记(语雀)。
https://www.yuque.com/docs/share/3df0e6c8-54d4-4b4c-9c2b-dc188e47345c?# 《EasyExcel》

二. POI-Excel

与EasyExcel相比,这个要难得多,比如:没有注解的使用,要导入表头部分需要手动导入。但是可以对POI-Excel进行封装,例如若依项目,就是对POI-Excel做了封装,让POI-Excel也可以使用注解,用法难度也不高,很。。可恶,被他装到了。但是我认为,还是使用EasyExcel简单方便一些(毕竟是阿里的)。
如果要问若依项目是如何对poi-excel进行封装的,那就是反射机制。不得不说封装的真大啊!
下面是若依如何获取表头的代码:

    
    public List getFields()
    {
        List fields = new ArrayList();
        List tempFields = new ArrayList<>();
        tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
        tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
        for (Field field : tempFields)
        {
            // 单注解
            if (field.isAnnotationPresent(Excel.class))
            {
                Excel attr = field.getAnnotation(Excel.class);
                if (attr != null && (attr.type() == Type.ALL || attr.type() == type))
                {
                    field.setAccessible(true);
                    fields.add(new Object[] { field, attr });
                }
            }

            // 多注解
            if (field.isAnnotationPresent(Excels.class))
            {
                Excels attrs = field.getAnnotation(Excels.class);
                Excel[] excels = attrs.value();
                for (Excel attr : excels)
                {
                    if (attr != null && (attr.type() == Type.ALL || attr.type() == type))
                    {
                        field.setAccessible(true);
                        fields.add(new Object[] { field, attr });
                    }
                }
            }
        }
        return fields;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号