• 技术文章 >Java >Java基础

    java怎么导入excel文件

    王林王林2019-12-09 15:50:47原创2908

    思路分析:

    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文件的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java 导入 excel 文件
    上一篇:java中什么是进程同步与同步传输 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java 如何加密• windows配置java环境• java中什么是进程同步与同步传输• eclipse如何用java
    1/1

    PHP中文网