jfinal excel 文件导入

来源:互联网 发布:淘宝app如何收藏店铺 编辑:程序博客网 时间:2024/06/03 13:44

一、选择文件上传
html代码

    <form id="myFormId" action="user/initimport" method="post"enctype="multipart/form-data" target="frmright">        <table class="tableStyle" formMode="transparent">            <tr></tr>            <tr>                <td>                <input type="file" id="filePath" name="filePath" class="validate[required]"/>                </td>            </tr>            <tr>                <td colspan="4">                <input type="button" value="提交" id="btn" onclick='sub()'/>                <input type="button" value="取消" onclick='top.Dialog.close()' /></td>            </tr>        </table>    </form>

js代码

    function initComplete(){        $('#myFormId').live('submit', function(){         var valid = $('#myFormId').validationEngine({returnIsValid: true});        if(valid){        $("#btn").attr("disabled", "true");            $(this).ajaxSubmit({                success: function(responseText, statusText, xhr, $form){                    top.Dialog.alert(responseText,                            function() {                                closeWin();                            });                }            });         }return false;         });    }        function closeWin() {            //刷新数据            top.frmright.refresh(true);            //关闭窗口            top.Dialog.close();        }        function sub() {            $("#myFormId").submit();        }

二、excel文件处理

    public void initimport(){        boolean flag=Db.tx(new IAtom() {            boolean save_flag =true;            @Override            public boolean run() throws SQLException {                try {                    UploadFile up = getFile("filePath");                    List<String[]> list = ExcelKit.getExcelData(up.getFile());                    for (String[] strings : list) {                        if (strings[0] != null && !"".equals(strings[0])) {                            String id = strings[0];                            String username = strings[1];                            String date = strings[2];                            User user = new User();                            if (!"".equals(username )) {                                user.set("username",username);                            }                            if (!"".equals(date )) {                                user.set("date",DateUtil.getSqlDate(date,"yyyy-MM-dd"));                            }                            save_flag = user.save();                        }                    }                } catch (Exception e) {                    save_flag = false;                    e.printStackTrace();                }            return save_flag;        }    }

在excel单元格中,出现的数字可能会被自动转换格式。尤其是日期数据,比如2017-01-01,其结果就被转成2015。
excel的工具类方法ExcelKit.getData

    public List<String[]> getExcelData(File file){        return getData(file).get(0);//选择sheet1    }    private static List<List<String[]>> getData(File file){        HSSFWorkbook workbook;        List<List<String[]>> data = new ArrayList<List<String[]>>();        try {            workbook = new HSSFWorkbook(new FileInputStream(file));            HSSFSheet sheet=null;            //循环sheet            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {                sheet=workbook.getSheetAt(i);                List<String[]> rows = new ArrayList<String[]>();                int colsnum = 0;                //循环每一行                for (int j = 0; j <= sheet.getLastRowNum(); j++) {                    HSSFRow row=sheet.getRow(j);                    if(null != row){                        //列数以excel第二行为准,第二行为标题,第一行为excel导入提示信息                        colsnum = sheet.getRow(1).getPhysicalNumberOfCells();                        String[] cols = new String[colsnum];                        //循环每一个单元格,以一行为单位,组成一个数组                        for (int k = 0; k < colsnum; k++) {                            //判断单元格是否为null,若为null,则置空                            if(null != row.getCell(k)) {                                int type = row.getCell(k).getCellType();                                //判断单元格数据是否为数字                                if(type == HSSFCell.CELL_TYPE_NUMERIC){                                    //判断该数字的计数方法是否为科学计数法,若是,则转化为普通计数法                                    if(String.valueOf(row.getCell(k).getNumericCellValue()).matches(".*[E|e].*")) {                                        DecimalFormat df = new DecimalFormat("#.#");                                        //指定最长的小数点位为10                                        df.setMaximumFractionDigits(10);                                        cols[k] = df.format(row.getCell(k).getNumericCellValue());                                    //判断该数字是否是日期,若是则转成字符串                                    } else if(HSSFDateUtil.isCellDateFormatted(row.getCell(k))){                                        Date d = row.getCell(k).getDateCellValue();                                        DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");                                        cols[k] = formater.format(d);                                    }else{                                        cols[k] = (row.getCell(k)+"").trim();                                    }                                } else {                                    cols[k] = (row.getCell(k)+"").trim();                                }                            } else {                                cols[k] = "";                            }                        }                        //以一行为单位,加入list                        rows.add(cols);                    }                }                //返回所有数据,第一个list表示sheet,第二个list表示sheet内所有行数据,第三个string[]表示单元格数据                data.add(rows);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return  data;    }
1 0
原创粉丝点击