java项目使用JXL读取Excel文件,批量添加数据,导入Excel文件,导出数据到Excel文件

java项目在开发过程中,当遇到需要批量添加表单数据时,如果在页面一个表单一个表单地添加,效率很低,用户体验很差,比如说要添加学生信息,一个班有很多个学生,而学生信息无非就是姓名、性别、年龄等信息,这时,如果把学生信息的Excel文档批量添加,效率很高,省去了很多重复工作。那么java项目怎样读取、解析Excel文档呢?

java项目操作Excel文档,在业界一般就会用到POI或者是JXL,两个工具都比较好用,各有优缺点,本篇文章就使用JXL工具,以导入学生信息,导出湖北省行政区划为例,详细介绍JXL导入导出Excel文档的功能。

使用效果如下:

导入功能:

导出功能:

实现思路:导入时,先读取用户指定的Excel文档,将Excel文档中的每一行数据赋值给实体类中的对应的属性,逐个添加实体对象到数据库,多条添加记得开启事务;导出时,先查询出所有的数据,得到一个包含若干个对象的集合,然后在指定路径创建一个Excel文档,遍历数据集合,将对象逐条写到Excel文档中。

导入导出前端代码:

<body>
<h2 style="margin-left: 50px;margin-top: 50px">学生信息导入</h2>
<button class="layui-btn test" style="margin-left: 50px;margin-top: 10px" lay-data="{url: formTool.getAjaxBaseUrl()+'excel/readAndSaveExcel', accept: 'file'}">一键导入学生信息</button>
<h2 style="margin-left: 50px;margin-top: 50px">湖北省行政区划导出</h2>
<button class="layui-btn" style="margin-left: 50px;margin-top: 10px" id="outPrefecture">一键导出湖北省行政区划信息</button>
<script src="../../../layuiadmin/layui/layui.js" type="text/javascript" charset="utf-8"></script>
<script src="../../content/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../../../layuiadmin/lib/formTools.js" type="text/javascript" charset="UTF-8"></script>
<script type="text/javascript" charset="UTF-8">
    var layer;
    layui.use(['layer','upload'], function () {
        layer=layui.layer;
        var upload=layui.upload;
        upload.render({
            elem: '.test',
            exts: 'xls|xlsx',
            done: function(res, index, upload){
                if(res>0){
                    layer.msg("成功导入"+res+"条学生信息!",{icon:1});
                }else{
                    layer.msg("导入失败!",{icon:5});
                }
            }
        })

    });

    $("#outPrefecture").bind('click',function () {
        formTool.ajaxCallBack(null,"excel/outPrefectureToExcel",function (result) {
            layer.msg(result.msg,{icon:1});
        });
    });

</script>
</body>

导入实体类:

public class EduStudent implements Serializable {
    private Integer id;

    private Integer gcId;

    private Integer studyId;

    private String studentName;

    private Integer sex;

    private String studentNum;

    private Date birthDate;

    private Date enterTime;

    private String memberOneName;

    private String memberOneRelation;

    private String memberOneTelephone;

    private String memberOneWechat;

    private String memberOneQq;

    private String memberTwoName;

    private String memberTwoRelation;

    private String memberTwoTelephone;

    private String memberTwoWechat;

    private String memberTwoQq;

    private String keyContact;

    private String keyContactTelephone;

    private Byte isAvaliable;

    private BigDecimal studentMoney;

    private Byte paymentSource;

    private String openId;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getGcId() {
        return gcId;
    }

    public void setGcId(Integer gcId) {
        this.gcId = gcId;
    }

    public Integer getStudyId() {
        return studyId;
    }

    public void setStudyId(Integer studyId) {
        this.studyId = studyId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName == null ? null : studentName.trim();
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public String getStudentNum() {
        return studentNum;
    }

    public void setStudentNum(String studentNum) {
        this.studentNum = studentNum == null ? null : studentNum.trim();
    }
    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }
    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
    public Date getEnterTime() {
        return enterTime;
    }

    public void setEnterTime(Date enterTime) {
        this.enterTime = enterTime;
    }

    public String getMemberOneName() {
        return memberOneName;
    }

    public void setMemberOneName(String memberOneName) {
        this.memberOneName = memberOneName == null ? null : memberOneName.trim();
    }

    public String getMemberOneRelation() {
        return memberOneRelation;
    }

    public void setMemberOneRelation(String memberOneRelation) {
        this.memberOneRelation = memberOneRelation == null ? null : memberOneRelation.trim();
    }

    public String getMemberOneTelephone() {
        return memberOneTelephone;
    }

    public void setMemberOneTelephone(String memberOneTelephone) {
        this.memberOneTelephone = memberOneTelephone == null ? null : memberOneTelephone.trim();
    }

    public String getMemberOneWechat() {
        return memberOneWechat;
    }

    public void setMemberOneWechat(String memberOneWechat) {
        this.memberOneWechat = memberOneWechat == null ? null : memberOneWechat.trim();
    }

    public String getMemberOneQq() {
        return memberOneQq;
    }

    public void setMemberOneQq(String memberOneQq) {
        this.memberOneQq = memberOneQq == null ? null : memberOneQq.trim();
    }

    public String getMemberTwoName() {
        return memberTwoName;
    }

    public void setMemberTwoName(String memberTwoName) {
        this.memberTwoName = memberTwoName == null ? null : memberTwoName.trim();
    }

    public String getMemberTwoRelation() {
        return memberTwoRelation;
    }

    public void setMemberTwoRelation(String memberTwoRelation) {
        this.memberTwoRelation = memberTwoRelation == null ? null : memberTwoRelation.trim();
    }

    public String getMemberTwoTelephone() {
        return memberTwoTelephone;
    }

    public void setMemberTwoTelephone(String memberTwoTelephone) {
        this.memberTwoTelephone = memberTwoTelephone == null ? null : memberTwoTelephone.trim();
    }

    public String getMemberTwoWechat() {
        return memberTwoWechat;
    }

    public void setMemberTwoWechat(String memberTwoWechat) {
        this.memberTwoWechat = memberTwoWechat == null ? null : memberTwoWechat.trim();
    }

    public String getMemberTwoQq() {
        return memberTwoQq;
    }

    public void setMemberTwoQq(String memberTwoQq) {
        this.memberTwoQq = memberTwoQq == null ? null : memberTwoQq.trim();
    }

    public String getKeyContact() {
        return keyContact;
    }

    public void setKeyContact(String keyContact) {
        this.keyContact = keyContact == null ? null : keyContact.trim();
    }

    public String getKeyContactTelephone() {
        return keyContactTelephone;
    }

    public void setKeyContactTelephone(String keyContactTelephone) {
        this.keyContactTelephone = keyContactTelephone == null ? null : keyContactTelephone.trim();
    }

    public Byte getIsAvaliable() {
        return isAvaliable;
    }

    public void setIsAvaliable(Byte isAvaliable) {
        this.isAvaliable = isAvaliable;
    }

    public BigDecimal getStudentMoney() {
        return studentMoney;
    }

    public void setStudentMoney(BigDecimal studentMoney) {
        this.studentMoney = studentMoney;
    }

    public Byte getPaymentSource() {
        return paymentSource;
    }

    public void setPaymentSource(Byte paymentSource) {
        this.paymentSource = paymentSource;
    }

    public String getOpenId() {
        return openId;
    }

    public void setOpenId(String openId) {
        this.openId = openId == null ? null : openId.trim();
    }
}

导入Controller代码:

/**
     * 导入学生信息
     */
    @Transactional
    @RequestMapping(value = "readAndSaveExcel",method = RequestMethod.POST)
    public Integer readAndSaveExcel(MultipartFile file){
        Integer responseCode=0;
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
        Workbook book = null;
        try {
            book = Workbook.getWorkbook(file.getInputStream());
            // 获得第一个工作表对象
            Sheet sheet = book.getSheet(0);
            int rows=sheet.getRows();
            int columns=sheet.getColumns();
            // 遍历每行每列的单元格
            for(int i=3;i<rows;i++){
                EduStudent eduStudent=new EduStudent();
                for(int j=0;j<columns;j++){
                    eduStudent.setGcId(100);
                    eduStudent.setStudentNum(sheet.getCell(0,i).getContents());
                    eduStudent.setStudentName(sheet.getCell(1,i).getContents());
                    if(sheet.getCell(2,i).getContents().contains("男")) eduStudent.setSex(1);
                    else if(sheet.getCell(2,i).getContents().contains("女")) eduStudent.setSex(2);
                    eduStudent.setBirthDate(simpleDateFormat.parse(sheet.getCell(3,i).getContents()));
                    eduStudent.setEnterTime(simpleDateFormat.parse(sheet.getCell(4,i).getContents()));
                    eduStudent.setMemberOneName(sheet.getCell(5,i).getContents());
                    eduStudent.setMemberOneRelation(sheet.getCell(6,i).getContents());
                    eduStudent.setMemberOneTelephone(sheet.getCell(7,i).getContents());
                    eduStudent.setMemberOneWechat(sheet.getCell(8,i).getContents());
                    eduStudent.setMemberOneQq(sheet.getCell(9,i).getContents());
                    eduStudent.setMemberTwoName(sheet.getCell(10,i).getContents());
                    eduStudent.setMemberTwoRelation(sheet.getCell(11,i).getContents());
                    eduStudent.setMemberTwoTelephone(sheet.getCell(12,i).getContents());
                    eduStudent.setMemberTwoWechat(sheet.getCell(13,i).getContents());
                    eduStudent.setMemberTwoQq(sheet.getCell(14,i).getContents());
                    eduStudent.setKeyContact(sheet.getCell(15,i).getContents());
                    eduStudent.setKeyContactTelephone(sheet.getCell(16,i).getContents());
                }
                Integer insert = excelService.insertStudent(eduStudent);
                responseCode+=insert;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(book!=null){
                book.close();
            }
        }
        return responseCode;
    }

导出Controller代码:

/**
     * 导出湖北省行政区划信息
     */
    @RequestMapping(value = "outPrefectureToExcel",method = RequestMethod.POST)
    public ResponseData<JSON> outPrefectureToExcel(HttpServletRequest request) throws Exception{
        ResponseData<JSON> responseData=new ResponseData<>();
        String basePath = request.getServletContext().getRealPath("/");
        String savePath = basePath+"views"+File.separator+"backend"+File.separator+"test";
        WritableWorkbook book = null;
        String msg="导出失败!人品问题!";
        try {
            // 打开文件
            book = Workbook.createWorkbook(new File(savePath+File.separator+"prefecture.xls"));
            // 生成名为"学生"的工作表,参数0表示这是第一页
            WritableSheet sheet = book.createSheet("湖北省行政区划", 0);
            List<Prefecture> prefectureList = nodesService.queryAll();
            if(prefectureList!=null && !prefectureList.isEmpty()){
                for(int i=0; i<prefectureList.size(); i++){
                    sheet.addCell(new Label(0, i, prefectureList.get(i).getPrefectureId()));
                    sheet.addCell(new Label(1, i, prefectureList.get(i).getPrefecture()));
                }
                msg="成功导出了"+prefectureList.size()+"个行政区域!请到【"+savePath+"】路径下查看!";
            }
            // 写入数据并关闭文件
            book.write();
        } catch (Exception e) {
            e.printStackTrace();

        }finally{
            if(book!=null){
                try {
                    book.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return responseData.setMsg(msg);
    }

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值