使用 xls 文件 导入

前端  页面的代码:

点击按钮 触发的弹框导入事件。 也可以用使用form表单

  <div style="float:right; display: inline-block;">
       <button type="button" id="importBut" class="btn btn-primary">导入</button>
   </div>

对应的js代码: 这是使用了 zeroModal 插件的弹框。 在使用form 表单 利用了ajax 提交

  $("#importBut").click(function () {
        importBut();
    });


// 导入弹框
function importBut() {
        zeroModal.closeAll();
        zeroModal.show({
            title: '导入',
            content:'<form enctype="multipart/form-data" method="post" id="importForm">' +
                '<div class="form-group">' +
                '   <div class="form-cont">' +
                '        <input type="file" class="form-control"  name="file" />' +
                '   </div>' +
                '</div>' +
                ' <div class="form-group">' +
                '     <button type="button" style="float: right;margin-right: 70px;" id="saveBtn" class="btn btn-primary">保存</button>' +
                ' </div>'+
                '</form>',
            width: '470px',
            height: '260px',
            onLoad: function () {
                $('.zeromodal-container').css("top", "80px");
            },
            onComplete: function () {
                $('#saveBtn').unbind("click").click(function () {
                    var action = contextPath + "/manmachine/fileExcelImportCommonData";
                    // $("#importForm").attr("action",action);
                    // $("#importForm").formAction(action);
                    // $("#importForm").submit();
                    var formData = new FormData($("#importForm")[0]);
                    $.ajax({
                        url: action,
                        type: "POST",
                        data: formData,
                        async: false,
                        cache: false,
                        contentType: false,
                        processData: false,
                        success: function (data) {

                            alert("成功!");
                        },
                        error: function (returndata) {
                            console.log("====================Error==========================");
                        }
                    });


                });
            }
        });
}

后台接收代码:

  /**
     * 导入
     * @param file
     * @return
     */
    @RequestMapping(value="/fileExcelImportCommonData",method= RequestMethod.POST)
    @ResponseBody
    public Output fileExcelImport(MultipartFile file) {
        Output output = new Output();
        try {
            commonDataService.fileExcelImport(file);
            output.setData(true);
        } catch (Exception e) {
            logger.error("",e);
            output.setData(false);
        }
        return output;
    }

对应的serviceimpl 逻辑层的实现:

 private final static String XLS = "xls";
    private final static String XLSX = "xlsx";

    @Override
    public Integer fileExcelImport(MultipartFile myFile) throws Exception {
        //获得文件名
        Workbook workbook = null ;
        String fileName = myFile.getOriginalFilename();
        if(fileName.endsWith(XLS)){
            //2003
            workbook = new HSSFWorkbook(myFile.getInputStream());
        }else if(fileName.endsWith(XLSX)){
            //2007
            workbook = new XSSFWorkbook(myFile.getInputStream());
        }else{
            throw new Exception("文件不是Excel文件");
        }

        Sheet sheet = workbook.getSheet("Sheet1");
        int rows = sheet.getLastRowNum();// 指的行数,一共有多少行+
        // 获取所有列

        if(rows==0){
            throw new Exception("请填写数据");
        }

        // 取xls 中 表头的字段的坐标
        Map<String,Integer>  mapIndex = getSheetTitleIndex(sheet);

        // 循环所有的行  从第二行开始  数据开始
        for (int i = 0; i < rows; i++) {
            // 读取所有的行从第二行开始读取
            Row row = sheet.getRow(i+1);
            // 行不为空
            if (row != null) {
                // **读取cell**
                CommonData commonData = new CommonData();
                String title = getCellValue(row.getCell(mapIndex.get("标题")));
                String label = getCellValue(row.getCell(mapIndex.get("作者")));
                String value = getCellValue(row.getCell(mapIndex.get("来源")));

                commonData.setId(IdCreator.getUUID());
                commonData.setName(name);
                commonData.setValue(value);
                commonData.setLabel_(label);

                // 存入list 中
//                commonDataDao.save(commonData);
//
//                if( (i % 2000) == 0 ){
//                    Thread.sleep(2*1000);
//                }
            }
        }
        return rows-1;
    }

/**
     * 取xls 表格中第一行表格的坐标
     * @param
     */
    private Map<String,Integer> getSheetTitleIndex(Sheet sheet) {
        Map<String,Integer> map = new HashMap<>();
        // 获取表格中第一行的标题的下标
         Row rows = sheet.getRow(0);
            for(Cell cell:rows){
                cell.setCellType(cell.CELL_TYPE_STRING);//不推荐使用的方法,但是取出列有数字的话,要转换一下
                if(!StringUtils.isBlank(cell.getStringCellValue())){
                    if(cell.getStringCellValue().equals("标题")){
                            map.put("标题",cell.getColumnIndex());
                    }
                    if(cell.getStringCellValue().equals("作者")){
                        map.put("作者",cell.getColumnIndex());
                    }
                    if(cell.getStringCellValue().equals("来源")){
                        map.put("来源",cell.getColumnIndex());
                    }
                }
            }

            return map;
    }
/**
* 获得Cell内容
*
* @param cell
* @return
*/
public String getCellValue(Cell cell) {
String value = "";
if (cell != null) {
// 以下是判断数据的类型
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
value = cell.getNumericCellValue() + "";
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd").format(date);
} else {
value = "";
}
} else {
value = new DecimalFormat("0").format(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
value = cell.getBooleanCellValue() + "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
value = cell.getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
value = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
value = "非法字符";
break;
default:
value = "未知类型";
break;
}
}
return value.trim();
}
 

猜你喜欢

转载自www.cnblogs.com/yishuo/p/12972481.html