java中.xlsx或者.xls格式的Excel导入(servlet中处理的)

1、第一步:在pom.xml文件中添加maven依赖

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.9</version>
</dependency>
<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>3.9</version>
</dependency>

2、第二步:前端代码

<script type="text/javascript" src="js/bootstrap-modal.js"></script>
<script type="text/javascript" src="/scripts/jQuery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/scripts/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/ajaxfileupload.js"></script>
<input type="button" id="btn_import" class="btncol" data-toggle="modal" data-target="#myModal" value="黑名单导入"/>
<!--点击按钮弹出模态框-->
<div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <a class="close" data-dismiss="modal">×</a>
                <h5 class="modal-title f24" id="mySmallModalLabel">请选择要导入的黑名单</h5>
            </div>
            <div class="modal-body">
                <input type="file" name="fileName" id="fileName" class="form-control"/>
            </div>
            <div class="modal-footer" style="text-align: center">
                <input type="button" id="btn_import_q" class="btncol" value="确定导入"/>
                <input type="button" class="btncol" data-dismiss="modal" value="取消"/>
            </div>
        </div>
    </div>
</div>
$.ajaxFileUpload({
    url: '/importExcleRoster.do?user_type=0',//上传excle要提交到的action
    secureuri: false,//是否用安全提交,默认为false
    fileElementId: 'fileName',//file选择文件的框的id
    dataType: 'json',//数据返回格式,如果用json,需要修改ajaxfileupload.js中的内容 eval("data = " + data ); -->data = jQuery.parseJSON(jQuery(data).text());
    async: true,
    error: function (data) {
        layer.alert("导入文件失败");
    },
    success: function (data) {
        //导入成功后刷新页面
        layer.alert(data.resultMsg, function () {
             window.location.reload()
        });
    }
});

3、第三步

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (!isMultipart) {
    response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
    logger.info("File is Null!");
} else {
    //创建工厂类
    DiskFileItemFactory factory = new DiskFileItemFactory();
    //获取文件上传类
    ServletFileUpload sfu = new ServletFileUpload(factory);
    JSONObject jsonObject = null;
    PrintWriter out = null;
    HSSFWorkbook hssfWorkbook = null;
    XSSFWorkbook xssfWorkbook = null;
    try {
        //获取FileItem
        List<FileItem> fileItemList = sfu.parseRequest(request);

        Iterator it = fileItemList.iterator();
        while (it.hasNext()) {
            FileItem item = (FileItem) it.next();
            //如果item不是普通文本表单字段
            if (!item.isFormField()) {
                //对字符串进行URL解码的编码处理函数    //获取到上传文件的名字
                String fileName = URLDecoder.decode(item.getName(), "UTF-8");

                fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length());
                logger.info("fileName=====" + fileName);

                String fileUrl = this.getServletConfig().getServletContext().getRealPath(File.separator);
                logger.info("fileUrl=====" + fileUrl);

                File oldFile = new File(fileUrl, fileName);
                item.write(oldFile);
                //对传过来的excel文件更改名字,确保每次传过来的文件名字不一样
                String newfileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + fileName;

                File file = new File(fileUrl, newfileName);
                oldFile.renameTo(file);
                /*判断文件大小,2Mb*/
                if (file.length() > SystemInfo.maxSizeOfImport) {
                    jsonObject = JSONObject.fromObject("{\"resultData\": \"无数据\", \"resultMsg\": \"文件过大,不可超过2M\", \"resultCode\": \"1009\"}");
                    out = response.getWriter();
                    out.write(jsonObject.toString());
                    return;
                }

                //上传后的路径
                String filePath = file.getPath();

                List<Map<String, Object>> gdUserCreditImportTList = null;
                //判断Excle后缀名是xls还是xlsx,然后读取excle中的数据
                try{
                    hssfWorkbook = new HSSFWorkbook(new FileInputStream(file));//.xls格式的Excle文件
                    gdUserCreditImportTList = readExcle(hssfWorkbook);
                }catch (Exception e){
                    xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));//.xlsx格式的Excle文件
                    gdUserCreditImportTList = readExcle(xssfWorkbook);
                }
		/** 批量插入数据库表中*/
            }
        }
	ResultData resultData = new ResultData();
	resultData.setResultData(200);
        resultData.setResultMsg("导入完成!");
        resultData.setResultData("");
        response.setStatus(HttpServletResponse.SC_OK);
        response.setContentType("text/json;charset=UTF-8");
        out = response.getWriter();
        out.write(JSONObject.fromObject(resultData).toString());//返
    } catch (Exception e) {
        e.printStackTrace();
        logger.info("Exception" + e.getMessage());
    } finally {
        if (out != null) {
            out.flush();
            out.close();
        }
        if (xssfWorkbook != null) {
            xssfWorkbook.close();
        }
        if (hssfWorkbook != null) {
            hssfWorkbook.close();
        }
    }
    logger.info("Success" + new Date().toLocaleString());
}

 4、第四步

/**
 * 读取excle数据并封装到list集合中
 * @param workbook
 * @return
 */
private List<Map<String, Object>> readExcle(Workbook workbook) {
    List<Map<String, Object>> gdUserCreditImportTList = new ArrayList<Map<String, Object>>();
    //循环工作表Sheet
    for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
        Sheet sheet = workbook.getSheetAt(numSheet);
        // 这种主要是判断是否含空以免包空指针
        if (sheet == null) {
            continue;
        }
        // 循环行Row
        for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
            Row row = sheet.getRow(rowNum);
            if (!isRowEmpty(row)) {
                continue;
            }
            // GdUserCreditImportT gdUserCreditImportT = new GdUserCreditImportT();
            Map<String, Object> map = new HashMap<String, Object>();
            //将电话号码那一列设为字符串类型
            //row.getCell(3).setCellType(HSSFCell.CELL_TYPE_STRING);

            String user_name = row.getCell(1).getRichStringCellValue().toString();
            // gdUserCreditImportT.setUserName(user_name);//用户姓名
            String user_card_id = row.getCell(2).getRichStringCellValue().toString();
            //  gdUserCreditImportT.setUserCardId(user_card_id);//用户身份证
            row.getCell(3).setCellType(HSSFCell.CELL_TYPE_STRING);
            String user_phone = row.getCell(3).getRichStringCellValue().toString();
            //  gdUserCreditImportT.setUserPhone(user_phone);//用户手机号
            map.put("userName", user_name);
            map.put("userCardId", user_card_id);
            map.put("userPhone", user_phone);
            map.put("userType", user_type);
            map.put("creationBy", user.getUserId());
            map.put("lastUpdateBy", String.valueOf(user.getUserId()));
            map.put("creationDate", new Date());
            map.put("lastUpdateDate", new Date());
            map.put("status", 1);

            //将每一行封装好的对象添加进集合
            gdUserCreditImportTList.add(map);
        }
    }
    return gdUserCreditImportTList;
}

 5、第五步

public static boolean isRowEmpty(Row row) {
    Boolean result = false;
    if (row != null) {
        for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
            Cell cell = row.getCell(c);
            if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK)
                result = true;
        }
    }
    return result;
}

猜你喜欢

转载自blog.csdn.net/weixin_42722953/article/details/87930132