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;
}