html:

<li>
	<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传:
	</span>
	<span class="input">
		<input type="file" id="upfile" name="upfile" placeholder="" />
	</span>
	<button onclick="importExp();">
		导入
	</button>
	<span>
		格式:.xls
	</span>
</li>

js:

//导入文件
function importExp() {
	var formData = new FormData();
	var name = $("#upfile").val();
	formData.append("file", $("#upfile")[0].files[0]);
	formData.append("name", name);
	$.ajax({
		url: '#springUrl('')/summary/importExp',
		type: 'POST',
		async: false,
		data: formData,
		// 告诉jQuery不要去处理发送的数据
		processData: false,
		// 告诉jQuery不要去设置Content-Type请求头
		contentType: false,
		beforeSend: function() {
			console.log("正在进行,请稍候");
		},
		success: function(responseStr) {
			if (responseStr == "01") {
				alert("导入成功");
			} else {
				alert("导入失败");
			}
		}
	});
}

controller:

@RequestMapping("/importExp")
    @ResponseBody
    public String importExp(@RequestParam("file") MultipartFile file, HttpServletRequest request){
        // 判断文件是否为空
        String flag = "02";//上传标志
        if (!file.isEmpty()) {
            try {
                String originalFilename = file.getOriginalFilename();//原文件名字
                InputStream is = file.getInputStream();//获取输入流
                flag = summaryExpServiceImpl.writeExelData(is);
                // 转存文件
                //file.transferTo(new File(filePath));
            } catch (Exception e) {
                flag="03";//上传出错
                e.printStackTrace();
            }
        }
        return flag;
    }

service:

/**
 * 写入
 * @param is
 */
public String writeExelData(InputStream is){
    List<List<String>> list = readExcelContent(is);
    for (int i=0,j=list.size();i<j;i++){
        List<String> row = list.get(i);
        ExpInfoSummary expInfoSummary = new ExpInfoSummary();
        expInfoSummary.setOrgName(row.get(0));
        expInfoSummary.setSiteName(row.get(1));
        expInfoSummary.setProductCode(row.get(2));
        expInfoSummary.setProductName(row.get(3));
        expInfoSummary.setProductNum(row.get(4));
        expInfoSummary.setProductPrice(Double.valueOf(row.get(5)));
        expInfoSummary.setProductState(row.get(6));
        pool.getSqlSession("psEpfSqlSession").selectList("com.jd.ps.data.epf.mapper.expInfoSummary.insertExp", expInfoSummary);
    }
    return "01";
}

/**
 * 读取Excel数据内容
 * @param is
 * @return Map 包含单元格数据内容的Map对象
 */
public List<List<String>> readExcelContent(InputStream is) {
    List<List<String>> content = new ArrayList<List<String>>();
    POIFSFileSystem fs;
    HSSFWorkbook wb;
    HSSFSheet sheet;
    HSSFRow row;
    String str = "";
    try {
        fs = new POIFSFileSystem(is);
        wb = new HSSFWorkbook(fs);
        sheet = wb.getSheetAt(0);
        // 得到总行数
        int rowNum = sheet.getLastRowNum();
        row = sheet.getRow(0);
        int colNum = row.getPhysicalNumberOfCells();
        // 正文内容应该从第二行开始,第一行为表头的标题
        for (int i = 1; i <= rowNum; i++) {
            row = sheet.getRow(i);
            int j = 0;
            List<String> list = new ArrayList<String>();
            while (j < colNum) {
                // 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
                // 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
                // str += getStringCellValue(row.getCell((short) j)).trim() +
                // "-";
                str = getCellFormatValue(row.getCell((short) j)).trim();
                list.add(str);
                j++;
            }
            content.add(list);
            str = "";
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return content;
}

/**
 * 根据HSSFCell类型设置数据
 * @param cell
 * @return
 */
private String getCellFormatValue(HSSFCell cell) {
    String cellvalue = "";
    if (cell != null) {
        // 判断当前Cell的Type
        switch (cell.getCellType()) {
            // 如果当前Cell的Type为NUMERIC
            case HSSFCell.CELL_TYPE_NUMERIC:
            case HSSFCell.CELL_TYPE_FORMULA: {
                // 判断当前的cell是否为Date
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    // 如果是Date类型则,转化为Data格式

                    //方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
                    //cellvalue = cell.getDateCellValue().toLocaleString();

                    //方法2:这样子的data格式是不带带时分秒的:2011-10-12
                    Date date = cell.getDateCellValue();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    cellvalue = sdf.format(date);

                }
                // 如果是纯数字
                else {
                    // 取得当前Cell的数值
                    cellvalue = String.valueOf(cell.getNumericCellValue());
                }
                break;
            }
            // 如果当前Cell的Type为STRIN
            case HSSFCell.CELL_TYPE_STRING:
                // 取得当前的Cell字符串
                cellvalue = cell.getRichStringCellValue().getString();
                break;
            // 默认的Cell值
            default:
                cellvalue = " ";
        }
    } else {
        cellvalue = "";
    }
    return cellvalue;

}


本文转载:CSDN博客