html:
js:
- <li>
- <span>上 传:</span>
- <span class="input">
- <input type="file" id="upfile" name="upfile" placeholder=""/>
- </span>
- <button onclick="importExp();">导入</button>
- <span>格式:.xls</span>
- </li>
- //导入文件 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;
- }