JSP
<a href="javascript:void(0);" onclick="inPage()" class="pt_btn btn_blue" id="inport" style="width:100px;">上传文件</a>
function inPage(){
$("#file_form")[0].reset();
$(".errInfo").html('');
$("#mainImTitleSpan").html('文件上传');
$("#mask_box_im_from").fadeIn();
}
<!--导入客户资源弹框 -->
<div id="mask_box_im_from" class="mask_box" style="overflow:auto;">
<div class="shade_box">
</div>
<div class="mask_main" style="text-align: left;height: 200;">
<a href="javascript:;" class="mask_colse"></a>
<div class="mainTitle">
<span id="mainImTitleSpan" style="margin-left: 36px;"></span>
</div>
<div class="rmsCon">
<form id="file_form" action="${ctx}/inten/importSource" enctype="multipart/form-data" method="post">
<ul class="content">
<li>
<input type="file" name="Mfile" id="file_input"/>
</li>
<div>
<input type="submit" value="确定" id="import_cust_pt_btn" class="pt_btn btn_blue" style="margin-left: 90px; width: 80px;"/>
<a href="javascript:void(0);" onclick="$('.mask_box').fadeOut();" class="btn_grayline ml_18">取消</a>
</div>
</ul>
</form>
</div>
</div>
</div>
JS
$("#import_cust_pt_btn").click(function(){
$("#file_form").submit(
function() {
//首先验证文件格式
var fileName = $('#file_input').val();
if (fileName === '') {
alert('请选择文件');
return false;
}
var fileType = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length)).toLowerCase();
if (fileType !== 'xls' && fileType !== 'xlsx') {
alert('文件格式不正确,excel文件!');
return false;
}
$("#file_form").ajaxSubmit({
dataType : "json",
success : function(data, textStatus) {
if (data.list == null){
$('.mask_box').fadeOut();
alert('上传文件成功');
} else {
$('.mask_box').fadeOut();
alert(data.list);
}
return false;
}
});
return false;
});
});
Controller
@RequestMapping("/importSource")
@ResponseBody
public ResultVo importSource(MultipartFile Mfile,HttpServletRequest request, HttpServletResponse response) throws Exception{
ResultVo rv=new ResultVo();
List<String> msgList= new ArrayList();
//判断文件是否为空
if(Mfile==null) return rv;
//获取文件名
String name=Mfile.getOriginalFilename();
//进一步判断文件是否为空(即判断其大小是否为0或其名称是否为null)
long size=Mfile.getSize();
if(name==null || ("").equals(name) && size==0) return rv;
// 将客户端上传文件存储在服务器本地
CommonsMultipartFile cf = (CommonsMultipartFile) Mfile; // 把spring文件上传的MultipartFile转换成CommonsMultipartFile类型
String directory = "D:\\fileupload";
File file = new File(directory);
// 创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
if (!file.exists())
file.mkdirs();
// 根据文件名判断文件是2003版本还是2007版本,然后在服务器本地创建相应的文件
File file1 = null;
if (isExcel2007(name)) {
file1 = new File(directory, new Date().getTime() + ".xlsx");
}else{
file1 = new File(directory, new Date().getTime() + ".xls");
}
// 将上传的文件写入新建的文件中
try {
cf.getFileItem().write(file1);
} catch (Exception e) {
msgList.add("文件保存本地出现异常");
rv.setList(msgList);
return rv;
}
//开始处理文件
try{
//查出所有启用的未删除的且状态是有效的BD
List<Staff> bds = UcHelper.getStaffsByLevelCode("L1001003");
rv = userIntenService.execute(name,file1,rv,bds);
}catch(Exception e){
e.printStackTrace();
}
return rv;
}
/**
* 上传文件
* @param fileName
* @param Mfile
* @return
* @throws Exception
*/
@Override
public ResultVo execute(String fileName, File file1,ResultVo rv,List<Staff> bds) throws Exception{
// 初始化输入流
InputStream is = null;
List<String> msgList= new ArrayList();
try {
// 验证文件名是否合格
if (!validateExcel(fileName)) {
msgList.add(errorMsg);
rv.setList(msgList);
return rv;
}
// 根据文件名判断文件是2003版本还是2007版本
boolean isExcel2003 = true;
if (isExcel2007(fileName)) {
isExcel2003 = false;
}
// 根据新建的文件实例化输入流
is = new FileInputStream(file1);
// 根据版本选择创建Workbook的方式
Workbook wb = null;
try{
wb = createWorkbook(is, isExcel2003);
}catch(Exception e){
errorMsg="文件格式不对";
msgList.add(errorMsg);
rv.setList(msgList);
return rv;
}
// 读取Excel里面客户的信息
rv = readExcelValue(wb,rv,bds);
is.close();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
is = null;
e.printStackTrace();
}
}
}
return rv;
}
/**
* 验证EXCEL文件
*
* @param filePath
* @return
*/
public boolean validateExcel(String filePath) {
if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {
errorMsg = "文件名不是excel格式";
return false;
}
return true;
}
/**
* 是否是2007的excel,返回true是2007
* @param filePath
* @return
*/
public boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
}
/**
* 根据版本选择创建Workbook的方式
*/
private Workbook createWorkbook(InputStream is, boolean isExcel2003) throws IOException {
Workbook wb = null;
// 当excel是2003时
if (isExcel2003) {
wb = new HSSFWorkbook(is);
} else {// 当excel是2007时
wb = new XSSFWorkbook(is);
}
return wb;
}
/***
* 这种方法支持03,和07版本的excel读取 但是对于合并的单元格,除了第一行第一列之外,其他部分读取的值为空
*
* @param is
* @throws ParseException
*/
@SuppressWarnings({ "unchecked", "rawtypes"})
public ResultVo readExcelValue(Workbook wb,ResultVo rv,List<Staff> bds) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String msg = "";
List<String> msgList= new ArrayList();
rv.setSuccess(false);
//获取当前所有的BD的 id 和 姓名
HashMap bdMap = new HashMap();
String BDName = "";
Long BDid = null;
for (Staff staff : bds) {
BDid = staff.getId();
BDName = staff.getName();
bdMap.put(BDName,BDid);
}
for (int i = 0, len = wb.getNumberOfSheets(); i < len; i++) {
Sheet sheet = wb.getSheetAt(i);
if (sheet == null) {
msg = "第" + i + "个sheet为空!";
msgList.add(msg);
rv.setList(msgList);
return rv;
}
for (int j = 0; j <= sheet.getLastRowNum(); j++) {
Row row = sheet.getRow(j);
if (row == null) {
msg = "第" + i + "个sheet, 第" + j + "行,存在空白行!";
msgList.add(msg);
rv.setList(msgList);
return rv;
}
UserInten userInten = new UserInten();
userInten.setUserSource("04");// 客户来源-表格导入
userInten.setStatus("01");//已分配
userInten.setUserStatus("00");//默认值:未注册
userInten.setBdDate(sdf.parse(sdf.format(new Date())));//分配时间设置为导入时间
// 读取每一个单元格
for (int k = 0; k < row.getLastCellNum(); k++) {
Cell cell = row.getCell(k);
//校验表格字段名称是否为空
if(j==0 && cell==null){
msg="表格字段名称不可为空";
msgList.add(msg);
rv.setList(msgList);
break;
}
// 校验联系方式是否为空
if (j > 0 && k == 0 && null ==cell) {
msg = "第" + i + "个sheet,第" + j+ "行,第" + k + "列,联系方式为空;";
msgList.add(msg);
rv.setList(msgList);
break;
}
String cellValue = "";
if(null != cell){
cellValue = getValue(cell);
}
System.out.println("第" + i + "个sheet,第" + j + "行,第" + k+ "列:" + cellValue);
// 字段名校验
if (j == 0) {
msg = valideExcelFormat(i, j, k, cellValue);
if (!"".equals(msg)) {
msgList.add(msg);
rv.setList(msgList);
return rv;
}
}
// 校验手机号
if (j > 0 && k == 0 && StringUtil.isNotBlank(cellValue)) {
//校验手机号格式
if (!RegexChk.checkCellPhone(cellValue)) {
msg = "第" + i + "个sheet,第" + j + "行,第" + k + "列,联系方式格式错误;";
msgList.add(msg);
rv.setList(msgList);
break;
}
//校验手机号是否已存在
List<UserInten>list=userIntenDao.selectByMobile(cellValue);
if(CollectionUtil.isNotEmpty(list)&&list.size()>0){
msg = "第" + i + "个sheet,第" + j + "行,第" + k + "列,联系方式已存在;";
msgList.add(msg);
rv.setList(msgList);
break;
}
userInten.setMobile(cellValue);
}
// 校验BD是否存在
if (j > 0 && k == 3 && StringUtil.isNotBlank(cellValue)) {
if (null == bdMap.get(cellValue)) {
msg = "第" + i + "个sheet,第" + j + "行,第" + k + "列,所属BD姓名错误;";
msgList.add(msg);
rv.setList(msgList);
break;
}
userInten.setBdId(bdMap.get(cellValue).toString());
userInten.setBdName(cellValue);
}
// 录入数据库
if (j > 0 && k == 1 && StringUtil.isNotBlank(cellValue)) {
userInten.setCompanyName((cellValue));
}
if (j > 0 && k == 2 && StringUtil.isNotBlank(cellValue)) {
userInten.setName((cellValue));
}
if (j > 0 && k == row.getLastCellNum() - 1) {
userInten.setId(userInten.generateId());
userIntenDao.insertSelective(userInten);
userIntenDao.updateCIDByUserCID();
userIntenDao.updateCIDBycoopCID();
userIntenDao.updateUserStatusNotQualify();
userIntenDao.updateUserStatusQualified();
}
}
System.out.println("第" + j + "行,处理完毕");
}
}
if(null == rv.getList()){
rv.setSuccess(true);
}
return rv;
}