From f52362127751004c996ca9ee2f6f87d7e010b424 Mon Sep 17 00:00:00 2001
From: luoyb <412940104@qq.com>
Date: 星期五, 19 二月 2021 17:14:06 +0800
Subject: [PATCH] Merge branch 'lybDevelop'

---
 febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/util/PoiImportExcel.java |  190 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 190 insertions(+), 0 deletions(-)

diff --git a/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/util/PoiImportExcel.java b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/util/PoiImportExcel.java
new file mode 100644
index 0000000..f73ff68
--- /dev/null
+++ b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/util/PoiImportExcel.java
@@ -0,0 +1,190 @@
+package cc.mrbird.febs.server.hr.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.poi.hssf.usermodel.HSSFDataFormat;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+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;
+
+public class PoiImportExcel {
+
+	private final static String excel2003L = ".xls"; // 2003- 版本的excel
+	private final static String excel2007U = ".xlsx"; // 2007+ 版本的excel
+
+	/**
+	 * 描述:获取IO流中的数据,组装成List<List<Object>>对象
+	 * 
+	 * @param in,fileName
+	 * @return
+	 * @throws IOException
+	 */
+	public static List<List<Object>> getListByExcel(InputStream in, String fileName) throws Exception {
+		List<List<Object>> list = null;
+
+		// 创建Excel工作薄
+		Workbook work = getWorkbook(in, fileName);
+		if (null == work) {
+			throw new Exception("创建Excel工作薄为空!");
+		}
+		Sheet sheet = null;
+		Row row = null;
+		Cell cell = null;
+
+		list = new ArrayList<List<Object>>();
+		// 直接获取第一个sheet
+		sheet = work.getSheetAt(0);
+		if (sheet == null) {
+			return list;
+		}
+		// 取得Excel的总列数,总行数
+		int columns = 0;
+		Row firstRow = sheet.getRow((short) 0);
+		if (firstRow != null) {
+			columns = firstRow.getPhysicalNumberOfCells();
+		}
+
+		int rows = sheet.getPhysicalNumberOfRows();
+		List<Object> dataRow = null;
+
+		// 首行为定义标题的行,数据从第2行开始
+		for (int i = 1; i < rows; i++) {
+			dataRow = new ArrayList<Object>();
+			// 获取行
+			row = sheet.getRow(i);
+			if (row != null) {
+				// columns=row.getPhysicalNumberOfCells();//不在这里设置,通过firstRow来获取列数信息。
+				for (int j = 0; j < columns; j++) {
+					// 获取某行某列的某一个单元格
+					cell = row.getCell(j);
+					// 往dataRow存值
+					dataRow.add(getCellValue(cell));
+				}
+				list.add(dataRow);
+			} else {
+				list.add(new ArrayList<>());
+			}
+		}
+
+		// 遍历当前sheet中的所有行
+		/*
+		 * int countCellNum = 0; for (int j = sheet.getFirstRowNum(); j <=
+		 * sheet.getLastRowNum(); j++) { row = sheet.getRow(j); if (row == null
+		 * || row.getFirstCellNum() == j) { if (row != null) countCellNum =
+		 * row.getLastCellNum(); continue; }
+		 * 
+		 * // 遍历所有的列 List<Object> li = new ArrayList<Object>(); for (int y = row
+		 * .getFirstCellNum(); y <= countCellNum; y++) { cell = row.getCell(y);
+		 * li.add(this.getCellValue(cell));
+		 * 
+		 * } list.add(li); }
+		 */
+
+		work.close();
+		return list;
+	}
+
+	/**
+	 * 描述:根据文件后缀,自适应上传文件的版本
+	 * 
+	 * @param inStr,fileName
+	 * @return
+	 * @throws Exception
+	 */
+	public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
+		Workbook wb = null;
+		String fileType = fileName.substring(fileName.lastIndexOf("."));
+		if (excel2003L.equals(fileType)) {
+			wb = new HSSFWorkbook(inStr); // 2003-
+		} else if (excel2007U.equals(fileType)) {
+			wb = new XSSFWorkbook(inStr); // 2007+
+		} else {
+			throw new Exception("解析的文件格式有误!");
+		}
+		return wb;
+	}
+
+	/**
+	 * 描述:对表格中数值进行格式化
+	 * 
+	 * @param cell
+	 * @return
+	 */
+	@SuppressWarnings("deprecation")
+	public static Object getCellValue(Cell cell) {
+		try {
+			Object value = null;
+
+			if (cell == null) {
+				value = "";
+				return value;
+			}
+
+			DecimalFormat df = new DecimalFormat("0"); // 格式化number String字符
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 日期格式化
+			DecimalFormat df2 = new DecimalFormat("0.00"); // 格式化数字
+
+			switch (cell.getCellType()) {
+			case Cell.CELL_TYPE_STRING:
+				value = cell.getRichStringCellValue().getString();
+				break;
+			case Cell.CELL_TYPE_NUMERIC:
+				if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
+
+					if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")
+							|| cell.getCellStyle().getDataFormat() == 176) {
+						sdf = new SimpleDateFormat("HH:mm");
+					}
+					Date date = cell.getDateCellValue();
+					value = sdf.format(date);
+
+				} else if (cell.getCellStyle().getDataFormat() == 58) {
+					// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
+					SimpleDateFormat sdf2 = new SimpleDateFormat("MM-dd");
+					double cellValue = cell.getNumericCellValue();
+					Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(cellValue);
+					value = sdf2.format(date);
+				} else if (cell.getCellStyle().getDataFormat() == 183 || cell.getCellStyle().getDataFormat() == 177
+						|| cell.getCellStyle().getDataFormat() == 181) {
+					// 处理自定义日期格式:y年m月d日(通过判断单元格的格式id解决,id的值是183)
+					SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
+					Date date = cell.getDateCellValue();
+					value = sdf2.format(date);
+				} else {
+					if ("General".equals(cell.getCellStyle().getDataFormatString())) {
+						value = df.format(cell.getNumericCellValue());
+					} else {
+						value = df2.format(cell.getNumericCellValue());
+					}
+				}
+
+				break;
+			case Cell.CELL_TYPE_BOOLEAN:
+				value = cell.getBooleanCellValue();
+				break;
+			case Cell.CELL_TYPE_BLANK:
+				value = "";
+				break;
+			default:
+				value = cell.getStringCellValue();
+				break;
+			}
+			return value;
+
+		} catch (Exception e) {
+			return null;
+		}
+
+	}
+
+}
\ No newline at end of file

--
Gitblit v1.8.0