zoukankan      html  css  js  c++  java
  • Apache POI 工具类 [ PoiUtil ]


    pom.xml

    
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.7</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
        <scope>provided</scope>
    </dependency>
    
    


    PoiUtil.java

    
    package com.app.core.util;
    
    import com.app.core.code.Symbol;
    import lombok.extern.log4j.Log4j2;
    import org.apache.commons.io.FilenameUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellType;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    @Log4j2
    public class PoiUtil {
        /**
         * 将数据写入EXCEL
         *
         * @param <T>
         * @param fileName  EXCEL文件名称
         * @param sheetName EXCEL页名
         * @param data      待写入数据
         * @throws Exception
         */
        public static <T> void writeExcel(final String fileName, final String sheetName, final List<T[]> data) {
            OutputStream out = null;
            try {
                // 创建 EXCEL 工作簿
                XSSFWorkbook workBook = new XSSFWorkbook();
                // 创建 EXCEL Sheet 页
                XSSFSheet sheet = workBook.createSheet(sheetName);
                // 声明 EXCEL 行
                XSSFRow row;
                // 声明 EXCEL 单元格
                XSSFCell cell;
    
                // 迭代设置EXCEL每行数据
                int rowNo = 0; // 行号
                for (T[] objs : data) {
                    row = sheet.createRow(rowNo++);
                    // 迭代设置EXCEL当前行每个单元格数据
                    int cellNo = 0; // 列号
                    for (T obj : objs) {
                        cell = row.createCell(cellNo++);
                        cell.setCellValue(String.valueOf(obj));
                    }
                }
    
                // 创建文件所在目录
                String filePath = FilenameUtils.getFullPath(fileName);
                File file = new File(filePath);
                if (!file.exists()) {
                    file.mkdirs();
                }
                // 设置文件输出流,写入EXCEL数据
                String excelName = StringUtils.join(filePath, FilenameUtils.getBaseName(fileName), Symbol.DOT.getSymbol().concat("xlsx"));
    
                out = new FileOutputStream(excelName);
                // 写入文件流
                workBook.write(out);
                workBook.close();
            } catch (Exception e) {
                log.error("将数据写入EXCEL出错", e);
            } finally {
                try {
                    if (null != out) {
                        out.flush();
                        out.close();
                    }
                } catch (IOException e) {
                    log.error("关闭文件输出流出错", e);
                }
            }
        }
    
        /**
         * 读取EXCEL中指定下标页的数据
         *
         * @param fileName
         * @param sheetIndex
         * @return
         */
        public static List<String[]> readExcel(final String fileName, final Integer sheetIndex) {
            List<String[]> list = null;
            InputStream in = null;
            try {
                // 获取文件输入流
                String excelName = StringUtils.join(FilenameUtils.getFullPath(fileName), FilenameUtils.getBaseName(fileName), Symbol.DOT.getSymbol().concat("xlsx"));
                in = new FileInputStream(excelName);
                // 创建 EXCEL 工作簿
                XSSFWorkbook workBook = new XSSFWorkbook(in);
                // 获取 EXCEL Sheet 页
                XSSFSheet sheet = workBook.getSheetAt(sheetIndex);
    
                list = new ArrayList<String[]>();
                String[] strArr = null;
                // 遍历每行记录
                for (Row row : sheet) {
                    strArr = new String[row.getPhysicalNumberOfCells()];
                    // 遍历每单元格记录
                    for (Cell cell : row) {
                        // 根据单元格的类型获取不同数据类型的值
                        CellType cellType = cell.getCellTypeEnum();
                        if (CellType.NUMERIC.equals(cellType))
                            strArr[cell.getColumnIndex()] = String.valueOf(cell.getNumericCellValue());
                        else if (CellType.STRING.equals(cellType))
                            strArr[cell.getColumnIndex()] = cell.getStringCellValue();
                    }
                    // 将数据放入集合
                    list.add(strArr);
                }
    
                workBook.close();
            } catch (Exception e) {
                log.error("读取EXCEL中指定下标页的数据出错", e);
            } finally {
                try {
                    if (null != in)
                        in.close();
                } catch (IOException e) {
                    log.error("关闭文件输入流出错", e);
                }
            }
            return list;
        }
    }
    
    


    Symbol.java 标点符号枚举

    
    package com.app.core.code;
    
    public enum Symbol {
        /**
         * 逗号
         */
        COMMA(","),
        /**
         * 句号
         */
        DOT("."),
        /**
         * 冒号
         */
        COLON(":"),
        /**
         * 分号
         */
        SEMICOLON(";"),
        /**
         * 斜杠
         */
        SLASH("/"),
        /**
         * 反斜杠
         */
        BACKSLASH("\"),
        /**
         * 加号
         */
        PLUS("+"),
        /**
         * 减号
         */
        DASH("-"),
        /**
         * 等号
         */
        EQUALS("="),
        /**
         * 下划线
         */
        UNDERSCORE("_"),
        /**
         * 左方括号
         */
        LEFT_SQUARE_BRACKET("["),
        /**
         * 右方括号
         */
        RIGHT_SQUARE_BRACKET("]"),
        /**
         * 左大括号
         */
        LEFT_CURLY_BRACE("{"),
        /**
         * 右大括号
         */
        RIGHT_CURLY_BRACE("}"),
        /**
         * 与
         */
        AMPERSAND("&"),
        /**
         * 重音符(Tab键上面)
         */
        ACCENT("`"),
        /**
         * 换行符
         */
        LINE_BREAK("
    ");
    
        private final String symbol;
    
        Symbol(String symbol) {
            this.symbol = symbol;
        }
    
        public String getSymbol() {
            return symbol;
        }
    }
    
    
  • 相关阅读:
    Java方法命名之“由简入繁”原则
    设置Tomcat的字符编码
    MyBatis之会话Session原理
    SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fa5519] was not registered for synchronization because synchronization is not active
    python3 驱动 PyMySQL
    win 7 64 安装 MondgoDB 3.4
    Python
    win 7 64 安装 tensorflow
    俞敏洪:2017年上半年我的阅读书单和笔记 转
    阿里巴巴开源产品列表 转
  • 原文地址:https://www.cnblogs.com/lalalagq/p/10219402.html
Copyright © 2011-2022 走看看