ソースを参照

文案库 拒审重提 提交

zhouzeyu@c-top.com.cn 3 年 前
コミット
cc84060e03

+ 1 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/document/service/impl/DocumentLibraryServiceImpl.java

@@ -3,6 +3,7 @@ package cn.com.ctop.kuaishou.modules.document.service.impl;
 import cn.com.ctop.kuaishou.modules.document.entity.DocumentLibraryInfo;
 import cn.com.ctop.kuaishou.modules.document.mapper.DocumentLibraryMapper;
 import cn.com.ctop.kuaishou.modules.document.service.DocumentLibraryService;
+
 import cn.com.ctop.kuaishou.modules.utils.ExcelUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;

+ 170 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/utils/ExcelUtil.java

@@ -0,0 +1,170 @@
+package cn.com.ctop.kuaishou.modules.utils;
+
+import cn.com.ctop.common.module.utils.Check;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ExcelUtil {
+
+    private final static String xls = "xls";
+    private final static String xlsx = "xlsx";
+    private final static String DATE_FORMAT = "yyyy/MM/dd";
+
+    /**
+     * 读入excel文件,解析后返回
+     *
+     * @param file
+     * @throws IOException
+     */
+    public static List<String> readExcel(MultipartFile file) throws IOException {
+        //检查文件
+        checkFile(file);
+        //获得Workbook工作薄对象
+        Workbook workbook = getWorkBook(file);
+        //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
+//    List<String[]> list = new ArrayList<String[]>();
+        List<String> list = new ArrayList<>();
+        if (workbook != null) {
+            for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) {
+                //获得当前sheet工作表
+                Sheet sheet = workbook.getSheetAt(sheetNum);
+                if (sheet == null) {
+                    continue;
+                }
+                //获得当前sheet的开始行
+                int firstRowNum = sheet.getFirstRowNum();
+                //获得当前sheet的结束行
+                int lastRowNum = sheet.getLastRowNum();
+                //循环所有行
+                for (int rowNum = firstRowNum; rowNum <= lastRowNum; rowNum++) {
+                    //获得当前行
+                    Row row = sheet.getRow(rowNum);
+                    if (row == null) {
+                        continue;
+                    }
+                    //获得当前行的开始列
+                    int firstCellNum = row.getFirstCellNum();
+                    //获得当前行的列数
+                    int lastCellNum = row.getPhysicalNumberOfCells();
+//          String[] cells = new String[row.getPhysicalNumberOfCells()];
+                    //循环当前行
+                    String cellValue = getCellValue(row.getCell(firstCellNum));
+//                        String cellValue = getCellValue(cell);
+                    if (!Check.isNull(cellValue)) { //只要当前行的第一列
+                        list.add(cellValue);
+                    }
+//                    for(int cellNum = firstCellNum; cellNum <= lastCellNum;cellNum++){
+//                        Cell cell = row.getCell(cellNum);
+////            cells[cellNum] = getCellValue(cell);
+//                        String cellValue = getCellValue(row.getCell(firstCellNum));
+////                        String cellValue = getCellValue(cell);
+//                        if(!Check.isNull(cellValue)){
+//                            list.add(cellValue);
+//                        }
+//                    }
+
+                }
+            }
+            workbook.close();
+        }
+        return list;
+    }
+
+    //校验文件是否合法
+    public static void checkFile(MultipartFile file) throws IOException {
+        //判断文件是否存在
+        if (null == file) {
+            throw new FileNotFoundException("文件不存在!");
+        }
+        //获得文件名
+        String fileName = file.getOriginalFilename();
+        //判断文件是否是excel文件
+        if (!fileName.endsWith(xls) && !fileName.endsWith(xlsx)) {
+            throw new IOException(fileName + "不是excel文件");
+        }
+    }
+
+    public static Workbook getWorkBook(MultipartFile file) {
+        //获得文件名
+        String fileName = file.getOriginalFilename();
+        //创建Workbook工作薄对象,表示整个excel
+        Workbook workbook = null;
+        try {
+            //获取excel文件的io流
+            InputStream is = file.getInputStream();
+            //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
+            if (fileName.endsWith(xls)) {
+                //2003
+                workbook = new HSSFWorkbook(is);
+            } else if (fileName.endsWith(xlsx)) {
+                //2007
+                workbook = new XSSFWorkbook(is);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return workbook;
+    }
+
+    public static String getCellValue(Cell cell) {
+        String cellValue = "";
+        if (cell == null) {
+            return cellValue;
+        }
+        //如果当前单元格内容为日期类型,需要特殊处理
+        String dataFormatString = cell.getCellStyle().getDataFormatString();
+        if ("m/d/yy".equals(dataFormatString)) {
+            cellValue = new SimpleDateFormat(DATE_FORMAT).format(cell.getDateCellValue());
+            return cellValue;
+        }
+        /**
+         *     _NONE(-1),
+         *     NUMERIC(0),
+         *     STRING(1),
+         *     FORMULA(2),
+         *     BLANK(3),
+         *     BOOLEAN(4),
+         *     ERROR(5);
+         */
+
+        CellType cellType = cell.getCellTypeEnum();
+        //把数字当成String来读,避免出现1读成1.0的情况
+        if (cellType == CellType.NUMERIC) {
+            cell.setCellType(CellType.STRING);
+        }
+        //判断数据的类型
+        switch (cell.getCellTypeEnum()) {
+            case NUMERIC: //数字
+                cellValue = String.valueOf(cell.getNumericCellValue());
+                break;
+            case STRING: //字符串
+                cellValue = String.valueOf(cell.getStringCellValue());
+                break;
+            case BOOLEAN: //Boolean
+                cellValue = String.valueOf(cell.getBooleanCellValue());
+                break;
+            case FORMULA: //公式
+                cellValue = String.valueOf(cell.getCellFormula());
+                break;
+            case _NONE: //空值
+                cellValue = "";
+                break;
+            case ERROR: //故障
+                cellValue = "非法字符";
+                break;
+            default:
+                cellValue = "未知类型";
+                break;
+        }
+        return cellValue;
+    }
+}