Apache POI實現數據的Excel導入

得到上傳的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());
		}
	}
}

 

 

實體類

 

 

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;
    }
}

 

 

導入的文件列頭要和實體類一樣,如果要列頭是中文在就在幫助類58行下面寫一個判斷如果 headers[j] =“蘋果”,name head = "apple"

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章