得到上传的MultipartFile 文件转换成FileInputStream ,将输入流传入importExcelX解析返回List,然后遍历插入数据库。
ExportDataController.java
@RequestMapping(value = "ImportExcelProduct.do",method = RequestMethod.POST) public String ImportExcelProduct(@RequestParam("files") MultipartFile file){ BasicProductMsg basicProductMsg = new BasicProductMsg(); String fileName =file.getOriginalFilename() ; String returnStr = StringUtil.RETURN_ERROR_DATA_FORMAT;//这个是一个返回提示内容:上传格式错误! //文件不为空并且后缀等于xlsx就将上传的文件写入临时的文件夹中 if (!file.isEmpty() && fileName.endsWith(".xlsx")) { try { //得到文件的输入流 FileInputStream fis = (FileInputStream) file.getInputStream(); //解析Excel后得到的 List集合 List<Object> list = ImportExcelUtil.importExcelX(fis, basicProductMsg); for (Object objects : list) { BasicProductMsg bpmo = (BasicProductMsg) objects; //判断新增的记录数据表是否已经包含 if(basicProductMsgService.DetctBasicProductMsg(bpmo).size()!= 0){ continue; } basicProductMsgService.addBasicProductMsg(StringUtil.objectToMap(objects)); } //关闭输入流 fis.close(); returnStr = "Data import success"; } catch (Exception e) { e.printStackTrace(); returnStr = "Data import failure"; } } return StringUtil.returnPopover(returnStr,"/mainMate/productInform?a"); }
ImportExxcelUtil.java
import java.io.FileInputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.alibaba.fastjson.JSON; import com.sd.xm003.model.User; /** * 导入Excel表格的工具类 */ public class ImportExcelUtil { /** * POI:解析Excel文件中的数据并把每行数据封装成一个实体 * @param filePath 文件绝对路径 * @return List<Object> Excel中数据封装实体的集合 */ public static List<Object> importExcelX(FileInputStream fis,Object object){ List<Object> objects =new ArrayList<Object>(); Workbook wookbook = null; Cell cell = null; String json =""; //FileInputStream fis =null; //创建Excel工作簿 try { //得到文件输入流对象 //fis = new FileInputStream(filePath); //2007版本的excel,用.xlsx结尾 wookbook = new XSSFWorkbook(fis);//得到工作簿 fis.close(); } catch (IOException e1) { e1.printStackTrace(); } //得到第一个工作表 Sheet sheet = wookbook.getSheetAt(0); //获得表头 Row rowHead = sheet.getRow(0); //得到表头列数 int heads =rowHead.getPhysicalNumberOfCells(); String[] headers = new String[heads];//表头 //遍历表头存放在数组中 for(int i =0; i<heads; i++){ cell =rowHead.getCell(i); headers[i] =cell.getStringCellValue(); } //获得数据的总行数 int totalRowNum = sheet.getLastRowNum(); //遍历表格数据,生成对应 for (int i = 1; i <= totalRowNum; i++) { Row rowDate =sheet.getRow(i); for(int j = 0; j<heads; j++){ cell =rowDate.getCell(j); String value =getCellValue(cell); //String value =cell.getStringCellValue(); String head =headers [j]; if(j !=heads-1){ json = json+"\""+head+"\""+":"+"\""+value+"\""+","; } if(j ==heads-1){ json = json+"\""+head+"\""+":"+"\""+value+"\""; } } //生成单个json数据 json = "{"+json+"}"; object = JSON.parseObject(json,object.getClass()); objects.add(object); json =""; } return objects; } //判断从Excel文件中解析出来数据的格式 private static String getCellValue(Cell cell){ String value = null; //日期格式化 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if(cell == null || cell.equals("") || cell.getCellType() ==HSSFCell.CELL_TYPE_BLANK){ value = null; return value; } //简单的查检列类型 switch(cell.getCellType()) { case Cell.CELL_TYPE_STRING://字符串 value = cell.getRichStringCellValue().getString(); value = StringUtil.convertNull(value); break; case Cell.CELL_TYPE_NUMERIC://数字 //判断是否是日期类型 if(DateUtil.isCellDateFormatted(cell)){ Date date =cell.getDateCellValue(); //格式化日期类型 value = sdf.format(date);//.toString(); break; } long dd = (long)cell.getNumericCellValue(); value = dd+""; break; case Cell.CELL_TYPE_BLANK: value = ""; break; case Cell.CELL_TYPE_FORMULA: value = String.valueOf(cell.getCellFormula()); break; case Cell.CELL_TYPE_BOOLEAN://boolean型值 value = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_ERROR: value = String.valueOf(cell.getErrorCellValue()); break; default: break; } return value; } public static void main(String[] args) { User user =new User(); String filePath ="D:\\123.xlsx"; List<Object> objects =importExcelX(filePath,user); List<User> users =new ArrayList<User>(); for (Object object : objects) { users.add((User)object); } for (User user2 : users) { System.out.println(user2.toString()); } } }
StringUtil.java
/** * 返回给前端的提示框 * @param content 弹窗内容 * @param url 返回地址 * @return(返回中文会乱码) */ public static String returnPopover(String content,String url){ String str = "<!doctype html><html lang=\"en\">" + "<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head>" + "<body>" + "<script>alert(\"" + content + "\"),location.href=\""+url+"\";</script>" + "</body></html>"; return str; }
实体类
import java.util.Date; public class BasicProductMsg { private Integer id; private String productNo; private String productName; private String figureNo; private String model; private String unit; private String venderFigureNo; private String customer; private String remarks; private String companyFlag; private String operator; private String operatingTime; private String flag; private Integer minStock; private Integer maxStock; private Integer unitPackageNumber; private Integer number; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getProductNo() { return productNo; } public void setProductNo(String productNo) { this.productNo = productNo == null ? null : productNo.trim(); } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName == null ? null : productName.trim(); } public String getFigureNo() { return figureNo; } public void setFigureNo(String figureNo) { this.figureNo = figureNo == null ? null : figureNo.trim(); } public String getModel() { return model; } public void setModel(String model) { this.model = model == null ? null : model.trim(); } public String getUnit() { return unit; } public void setUnit(String unit) { this.unit = unit == null ? null : unit.trim(); } public String getVenderFigureNo() { return venderFigureNo; } public void setVenderFigureNo(String venderFigureNo) { this.venderFigureNo = venderFigureNo == null ? null : venderFigureNo.trim(); } public String getCustomer() { return customer; } public void setCustomer(String customer) { this.customer = customer == null ? null : customer.trim(); } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks == null ? null : remarks.trim(); } public String getCompanyFlag() { return companyFlag; } public void setCompanyFlag(String companyFlag) { this.companyFlag = companyFlag == null ? null : companyFlag.trim(); } public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator == null ? null : operator.trim(); } public String getOperatingTime() { return operatingTime; } public void setOperatingTime(String operatingTime) { this.operatingTime = operatingTime; } public String getFlag() { return flag; } public void setFlag(String flag) { this.flag = flag == null ? null : flag.trim(); } public Integer getMinStock() { return minStock; } public void setMinStock(Integer minStock) { this.minStock = minStock; } public Integer getMaxStock() { return maxStock; } public void setMaxStock(Integer maxStock) { this.maxStock = maxStock; } @Override public String toString() { return "BasicProductMsg{" + "id=" + id + ", productNo='" + productNo + '\'' + ", productName='" + productName + '\'' + ", figureNo='" + figureNo + '\'' + ", model='" + model + '\'' + ", unit='" + unit + '\'' + ", venderFigureNo='" + venderFigureNo + '\'' + ", customer='" + customer + '\'' + ", remarks='" + remarks + '\'' + ", companyFlag='" + companyFlag + '\'' + ", operator='" + operator + '\'' + ", operatingTime='" + operatingTime + '\'' + ", flag='" + flag + '\'' + ", minStock=" + minStock + ", maxStock=" + maxStock + '}'; } public Integer getUnitPackageNumber() { return unitPackageNumber; } public void setUnitPackageNumber(Integer unitPackageNumber) { this.unitPackageNumber = unitPackageNumber; } public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } }