html:
<li>
<span>
上 传:
</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;
}