侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

java怎么导入excel文件

Java  /  管理员 发布于 8年前   147

思路分析:

1、我们要做导入,实际上也就是先文件上传,然后读取文件的数据。

2、我们要有一个导入的模板,因为我们导入的Excel列要和我们的数据字段匹配上,所以我们要给它来一个规定,也就是模板。

3、首先做一个导入信息的临时表,用来存导入文件中的信息。每当导入的时候,我们先把表信息清空,再拿到数据放进来,然后我们对导入的数据进行检查,最后才全部导入。

这样做的目的是防止导入的数据和列没有对上却也直接导到了库里面。

免费视频教程分享:java在线视频

代码分析

1、前端js代码:

var actionPath = contextPath + "/alumni-import";$(function() {    //加载数据    loadData();    //上传文件    uploadFile({        subfix: ['xls'],        subfixTip: "请选择Excel的xls文件!",        successCall: function(data, status, a) {$('[name=attachementPath]').val(data.fileName);$.post(actionPath + "!importExcel", { "f_id": data.f_id }, function(data) {    if (data.success) {        alertify.alert(data.message);        $("#myModal-import").modal("hide");        loadData();    } else {        alertify.alert(data.message);    }}, "json");        }    });    //导入    $("#btn-import").click(function() {        var html = template("importTpl");        $("#import-body").html(html);        $("#myModal-import").modal();    });    //确认导入    $("#btn-sure").click(function() {        var type = $("#indentity-type").val();        alertify.confirm("确定要全部导入吗?", function(e) {if (!e) { return; } else {    $.post("/alumni-import!saveReal?type=" + type, function(data) {        alertify.alert("导入成功!", function() {location.href = "/alumni!hrefPage";        });    }, "json");}        });    });});50 function loadData() {    var options = {        url: actionPath + "!page"    };    loadPaginationData(options);}

2、后台功能代码

前端有四个请求,一个初始化页面数据加载,当然,一开始是没有数据的;一个导入文件上传;一个确认导入;一个导入完成后页面跳转回要信息页面(信息页面有一个批量导入跳转到这的导入页面)。

第一个后最后一个就不讲了。讲一下第二个和第三个。

(1)第二个

//上传文件后调用    public void importExcel() {        try {//清空临时表的数据baseAlumniImportSrv.deleteAll();//读取文件File file = gridFsDao.readFile(f_id);//把文件信息给临时表int count = excelXYSrv.importExcel(file);//清空上传的文件file.delete();sendSuccessMsg(count, "上传成功" + count + "条数据");        } catch (IOException e) {LOGGER.error(e);sendFailMsg(null, "上传失败");        }    }
@Override    //使用MongoDB GridFS    public File readFile(String f_id) {        //拿到文件        GridFSDBFile gridFSFile = mongoGridFs.findOne(new Query(Criteria.where(F_ID).is(f_id)));        if (gridFSFile == null) {return null;        }        String fileName = gridFSFile.getFilename();        String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());        InputStream ins = gridFSFile.getInputStream();        String tmpFile = UUID.randomUUID().toString() + extension;        File file = new File(tmpFile);        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 (IOException e) {e.printStackTrace();        }        return file;    }
/**     * @param excelFile     *从excel中读取数据,并存储到数据库临时表中     * @return     * @throws IOException     */    @Override    public int importExcel(File excelFile) throws IOException {        List<List<Object>> datas = ExcelImportUtil.readExcel(excelFile);        int count = 0;        for (int i = 1; i < datas.size(); i++) {BaseAlumniImport entity = this.convert2Entity(datas.get(i));this.baseAlumniImportSrv.save(entity);count++;        }        return count;    }

(3)第三个

public void saveReal() {        int count = 0;        List<BaseAlumniImport> importList = this.baseAlumniImportSrv.findAll();        for (int i = 0; i < importList.size(); i += 10) {List<BaseAlumniImport> newlist = new ArrayList<>();if ((i + 10) < importList.size()) {    newlist = importList.subList(i, i + 10);} else {    newlist = importList.subList(i, importList.size());}count += excelXYSrv.saveReal(newlist, this.type);        }        sendSuccessMsg(count, "导入成功" + importList.size() + "条数据");    }
@Override    public int saveReal(List<BaseAlumniImport> importList, String type) {        int count = 0;        String alumniIdentityName = dicSrv.findById(DicAlumniIdentity.class, Integer.parseInt(type)).getValue();        for (BaseAlumniImport inst : importList) {LOGGER.info(inst.getId());BaseAlumni v = this.importExportSrv.convert(inst);v.setId(IdKit.uuid());v.setCreateTime(new Date());v.setLastUpdate(new Date());this.baseAlumnidDao.save(v);this.baseAlumniImportSrv.deleteById(inst.getId());count++;        }        return count;    }
@Override    public int saveReal(List<BaseAlumniImport> importList, String type) {        int count = 0;        String alumniIdentityName = dicSrv.findById(DicAlumniIdentity.class, Integer.parseInt(type)).getValue();        for (BaseAlumniImport inst : importList) {LOGGER.info(inst.getId());BaseAlumni v = this.importExportSrv.convert(inst);v.setId(IdKit.uuid());v.setCreateTime(new Date());v.setLastUpdate(new Date());this.baseAlumnidDao.save(v);this.baseAlumniImportSrv.deleteById(inst.getId());count++;        }        return count;    }

结果图演示:

ff286bf0701c2b7c1685cc3c28d8c79.png

db383abc64946f827d45b6fd193cfc3.png

9af75394168eb1c44041f165bc7e0e7.png

dd5104a3cf5fce83fa6055163146954.png

相关文章教程推荐:java零基础入门

以上就是java怎么导入excel文件的详细内容,更多请关注其它相关文章!


  • 上一条:
    java如何导入项目
    下一条:
    eclipse如何用java
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客