1. 程式人生 > >java解析Excel,使用InputStream讀取檔案

java解析Excel,使用InputStream讀取檔案

一、需要匯入的jar包

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>

二、POIAPI連線

三、程式碼如下

     /**
	 * 獲取上傳的excel 解析資料
	 * 
	 * @param file
	 *            檔案
	 * @param excelName
	 *            檔名
	 * @return
	 * @throws IOException 
	 * @throws InvalidFormatException 
	 */
	@PostMapping("/readexcel")
	public List<WorkstationExcel> uploadExcel(@RequestParam MultipartFile file, @RequestParam String excelName) throws IOException, InvalidFormatException {
		List<WorkstationExcel> dataList = null;
		try (InputStream in = file.getInputStream()) {
			Workbook wb = WorkbookFactory.create(in);
			// 獲取第一個sheet
			Sheet sheet = wb.getSheetAt(0);
			// 獲取最大行數
			int rownum = sheet.getPhysicalNumberOfRows();
			// 獲取第一行
			Row row = sheet.getRow(0);
			// 存放表中的資料
			dataList = new ArrayList<WorkstationExcel>();
			// 迴圈行
			for (int i = 1; i < rownum; i++) {
				WorkstationExcel we = new WorkstationExcel();
				row = sheet.getRow(i);
				if (row != null) {
					we.name = getCellFormatValue(row.getCell(0));
					we.ip = getCellFormatValue(row.getCell(1));
					we.description = getCellFormatValue(row.getCell(2));
				} else {
					continue;
				}
                System.err.println("名稱:" + we.name + "------" + "IP:" +  we.ip + "------" + "描述:" + we.description);
				dataList.add(we);
			}
		}
		return dataList;
	}

	public String getCellFormatValue(Cell cell) {
		String cellValue = "";
		if (cell == null) {
			return cellValue;
		}
		// 判斷cell型別 getCellType()
		switch (cell.getCellType()) {
			case Cell.CELL_TYPE_NUMERIC: {
				// 獲取單元格的值作為數字 getNumericCellValue()
				cellValue = String.valueOf((int)cell.getNumericCellValue());
				break;
			}
			case Cell.CELL_TYPE_FORMULA: {
				// 判斷cell是否為日期格式
				if (DateUtil.isCellDateFormatted(cell)) {
					// 轉換為日期格式YYYY-mm-dd
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
					Date d = cell.getDateCellValue();
					if (d != null) {
						cellValue = sdf.format(d);
					}
				} else {
					// 數字
					cellValue = String.valueOf(cell.getNumericCellValue());
				}
				break;
			}
			case Cell.CELL_TYPE_STRING: {
				cellValue = cell.getRichStringCellValue().getString();
				break;
			}
		}
		return cellValue;
	}
	
	@SuppressWarnings("unused")
	private class WorkstationExcel {
		/**
		 * 工作站名 如 001
		 */
		public String name;
		/**
		 * 工作站ip
		 */
		public String ip;
		/**
		 * 描述
		 */
		public String description;
	}

四、Excel表如下

名稱 IP 描述
GYG4 127.0.0.33 sfs
DFSA 127.0.46.3 fsd
ADAS 172.26.6.15 dfd
WSFS 153.6.5.23 dgs

 五、獲取資料結果