poi를 이용하여 excel 데이터 가져오기, 코드 번거로운 문제 수정

4562 단어 Excel
얼마 전 프로젝트의 작은 모듈에 데이터 가져오는 기능을 추가해야 했다.프로젝트는 excel의 데이터 가져오기에 필요한 몇 군데가 있기 때문입니다.따라서 excel 가져오기를 공공 구성 요소로 봉인하는 것을 생각했다. 서로 다른 excel 데이터 가져오기 때문에 구체적인 입고 작업이 다르다.따라서 이 구성 요소는 가져온 데이터에 대한 읽기를 제공합니다.구체적인 서로 다른 입고 조작은 구체적인 실현 클래스에서 진행됩니다!
그래서 excel 데이터 가져오는 추상적인 클래스를 얻었다
 
직접 코드:
excel 읽기 방법
 
	public List<List<Object>> readFormExcel(File file, int startRow,
			int startColumn) throws Exception {
		List<List<Object>> list = new ArrayList<List<Object>>();

		Workbook workbook = null;
		if (file.getName().toUpperCase().endsWith(".XLS")) {
			workbook = createWorkBook(file);
		} else {
			workbook = createWorkbook2007(file);
		}

		Sheet sheet = workbook.getSheetAt(0);

		if (sheet == null) {
			throw new IllegalArgumentException(" ");
		}

		int rowNumbers = sheet.getLastRowNum();

		if (startRow > rowNumbers) {
			throw new IllegalArgumentException(" ");
		}
		int headColumnCount = sheet.getRow(0).getLastCellNum();
		for (int i = startRow; i <= rowNumbers; i++) {

			Row row = sheet.getRow(i);
			if (row == null) {

				continue;
			}

			int columnNumber = row.getLastCellNum();

			if (columnNumber < headColumnCount) {
				columnNumber = headColumnCount;
				// , 3 , 2 , 2 , 2 . 3 . .. , 
			}

			List<Object> cellList = new ArrayList<Object>();
			for (int j = startColumn; j < columnNumber; j++) {

				Cell cell = row.getCell(j);
				if (cell == null) {
					cellList.add("");
					continue;
				}

				Object value = null;
				switch (cell.getCellType()) {
				case Cell.CELL_TYPE_BLANK: {
					value = "";
					cellList.add(value);
					break;
				}
				case Cell.CELL_TYPE_FORMULA: {
					value = cell.getCellFormula();
					cellList.add(value);
					break;
				}
				case Cell.CELL_TYPE_NUMERIC: {

					if (workbook instanceof HSSFWorkbook) {
						if (HSSFDateUtil.isCellDateFormatted(cell)) {
							value = cell.getDateCellValue();
							cellList.add(value);
						} else {

							value = cell.getNumericCellValue();
							cellList.add(value);
						}
					} else {
						if (DateUtil.isCellDateFormatted(cell)) {
							value = cell.getDateCellValue();
							cellList.add(value);
						} else {

							value = cell.getNumericCellValue();
							cellList.add(value);
						}

					}
					break;
				}
				case Cell.CELL_TYPE_STRING: {
					value = cell.getRichStringCellValue().getString();
					cellList.add(value);
					break;
				}
				case Cell.CELL_TYPE_BOOLEAN: {
					value = cell.getBooleanCellValue();

					cellList.add(value);
					break;
				}

				default: {
					value = cell.getRichStringCellValue().getString();
					cellList.add(value);
					break;
				}
				}

			}
			list.add(cellList);
		}

		return list;
	}

 
클라이언트 호출 방법
 
	/**
	 * 
	 * @param file
	 *            execute 
	 * @param startRow
	 *             
	 * @param startColumn
	 *             
	 * @param requestData
	 *             
	 * @return  
	 * @throws Exception
	 */
	public int executeDataImport(File file, int startRow, int startColumn,
			Map<String, Object> requestData) throws Exception {

		String text = file.getName();
		List<List<Object>> importDatas = readFormExcel(file, startRow,
				startColumn);

		if (importDatas == null || importDatas.size() == 0) {
			return 0;
		}

		int resultCount = processBatchData(importDatas, requestData);

		return resultCount;
	}

 
실제 입고 추상적 방법
  
	/**
	 * 
	 * @param importDatas
	 *            excel 
	 * @param requestData
	 *             
	 * @return
	 */
	public abstract int processBatchData(List<List<Object>> importDatas,
			Map<String, Object> requestData);

 

좋은 웹페이지 즐겨찾기