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