1. 程式人生 > >Excel導入工具類兼容xls和xlsx

Excel導入工具類兼容xls和xlsx

imp rownum group else new rac 不同的 multi info

package com.bj58.finance.platform.operation.provider.util;

import org.apache.log4j.Logger;
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.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.util.ArrayList; import java.util.List; /** * excel讀寫工具類 */ public class
POIUtil { private static Logger logger = Logger.getLogger(POIUtil.class); private final static String xls = "xls"; private final static String xlsx = "xlsx"; /** * 讀入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[]>(); 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 + 1; 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()]; //循環當前行 for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) { Cell cell = row.getCell(cellNum); cells[cellNum] = getCellValue(cell); } list.add(cells); } } workbook.close(); } return list; } public static void checkFile(MultipartFile file) throws IOException { //判斷文件是否存在 if (null == file) { logger.error("文件不存在!"); throw new FileNotFoundException("文件不存在!"); } //獲得文件名 String fileName = file.getOriginalFilename(); //判斷文件是否是excel文件 if (!fileName.endsWith(xls) && !fileName.endsWith(xlsx)) { logger.error(fileName + "不是excel文件"); 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) { logger.info(e.getMessage()); } return workbook; } public static String getCellValue(Cell cell) { String cellValue = ""; if (cell == null) { return cellValue; } //把數字當成String來讀,避免出現1讀成1.0的情況 if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { cell.setCellType(Cell.CELL_TYPE_STRING); } //判斷數據的類型 switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: //數字 cellValue = String.valueOf(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_STRING: //字符串 cellValue = String.valueOf(cell.getStringCellValue()); break; case Cell.CELL_TYPE_BOOLEAN: //Boolean cellValue = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_FORMULA: //公式 cellValue = String.valueOf(cell.getCellFormula()); break; case Cell.CELL_TYPE_BLANK: //空值 cellValue = ""; break; case Cell.CELL_TYPE_ERROR: //故障 cellValue = "非法字符"; break; default: cellValue = "未知類型"; break; } return cellValue; } public static void main(String[] args) { File file = new File("D://新增產品支持的銀行列表模板.xlsx"); FileInputStream input = null; try { input = new FileInputStream(file); MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input)); List<String[]> list = readExcel(multipartFile); System.out.println(list); } catch (Exception e) { e.printStackTrace(); } } }

需要引入的Maven依賴:

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>

Excel導入工具類兼容xls和xlsx