• 搬砖


    package com.xf.common.myutils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PushbackInputStream;
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.List;
    import org.apache.commons.lang.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.openxml4j.opc.OPCPackage;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellValue;
    import org.apache.poi.ss.usermodel.DateUtil;
    import org.apache.poi.ss.usermodel.FormulaEvaluator;
    import org.apache.poi.ss.usermodel.PictureData;
    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.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    public class ReadExcelUtil {
        private Workbook workbook = null;
        private Sheet sheet;
        private Row row;
        private int sheetIndex = 0;
        private int rowIndex = 0;
        private int cellIndex = 0;
        private String file;
    
        public static ReadExcelUtil read(String file) throws IOException, InvalidFormatException {
            return new ReadExcelUtil(file);
        }
    
        public static ReadExcelUtil read(File file) throws IOException, InvalidFormatException {
            return new ReadExcelUtil(file.getAbsolutePath());
        }
    
        public ReadExcelUtil(String pathname) throws IOException, InvalidFormatException {
            InputStream in = new FileInputStream(pathname);
            if (!in.markSupported()) {
                in = new PushbackInputStream(in, 8);
            }
            try {
                this.workbook = new HSSFWorkbook(in);
            } catch (Exception e) {
                this.workbook = new XSSFWorkbook(OPCPackage.open(in));
            }
            if (this.workbook == null) {
                if (!judgeIsCSV(pathname)) {
                    throw new IllegalArgumentException("你的excel版本目前poi解析不了");
                }
                setFile(pathname);
            } else {
                setSheetIndex(0);
            }
        }
    
        public static void main(String[] args) throws IOException {
            try {
                String pathname = "C:\Users\huanglisong\Desktop\cb2b\GeoIPCountryWhois.csv";
    
                List<ArrayList<String>> list = read(pathname).setSheetIndex(0).readAllByTitle(0);
                for (ArrayList<String> rowArray : list) {
                    for (String string : rowArray) {
                        System.out.print(string + "	");
                    }
                    System.out.println();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public boolean judgeIsCSV(String fileName) {
            return fileName.endsWith(".csv");
        }
    
        public List<ArrayList<String>> readCoustom() throws FileNotFoundException, IOException {
            List<ArrayList<String>> excelData = new ArrayList<>();
            for (int i = this.rowIndex; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                ArrayList<String> rowArr = new ArrayList<>();
                this.row = this.sheet.getRow(i);
                for (int j = this.cellIndex; j < this.row.getPhysicalNumberOfCells(); j++) {
                    rowArr.add(getStringCellValue(this.row.getCell(j)));
                }
                excelData.add(rowArr);
            }
            return excelData;
        }
    
        public List<ArrayList<String>> readCoustomByTitle(int titleIndex) throws FileNotFoundException, IOException {
            Row titleRow = this.sheet.getRow(titleIndex);
            List<ArrayList<String>> excelData = new ArrayList<>();
            for (int i = this.rowIndex; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                ArrayList<String> rowArr = new ArrayList<>();
                this.row = this.sheet.getRow(i);
                for (int j = this.cellIndex; j < titleRow.getPhysicalNumberOfCells(); j++) {
                    rowArr.add(getStringCellValue(this.row.getCell(j)));
                }
                excelData.add(rowArr);
            }
            return excelData;
        }
    
        public List<ArrayList<String>> readCoustomExcludeNull() throws FileNotFoundException, IOException {
            List<ArrayList<String>> excelData = new ArrayList<>();
            for (int i = this.rowIndex; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                ArrayList<String> rowArr = new ArrayList<>();
                this.row = this.sheet.getRow(i);
                for (int j = this.cellIndex; j < this.row.getPhysicalNumberOfCells(); j++) {
                    String cellValue = getStringCellValue(this.row.getCell(j));
                    if (!cellValue.equals("")) {
                        rowArr.add(cellValue);
                    }
                }
                excelData.add(rowArr);
            }
            return excelData;
        }
    
        public List<ArrayList<String>> readAll() throws FileNotFoundException, IOException {
            List<ArrayList<String>> excelData = new ArrayList<>();
            for (int i = 0; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                ArrayList<String> rowArr = new ArrayList<>();
                this.row = this.sheet.getRow(i);
                for (int j = 0; j < this.row.getPhysicalNumberOfCells(); j++) {
                    rowArr.add(getStringCellValue(this.row.getCell(j)));
                }
                excelData.add(rowArr);
            }
            return excelData;
        }
    
        public List<ArrayList<String>> readAllByTitle(int titleIndex) throws FileNotFoundException, IOException {
            Row titleRow = this.sheet.getRow(titleIndex);
            System.out.println("titleRow.getPhysicalNumberOfCells() : " + titleRow.getPhysicalNumberOfCells());
            List<ArrayList<String>> excelData = new ArrayList<>();
            for (int i = 0; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                ArrayList<String> rowArr = new ArrayList<>();
                this.row = this.sheet.getRow(i);
                for (int j = 0; j < titleRow.getPhysicalNumberOfCells(); j++) {
                    rowArr.add(getStringCellValue(this.row.getCell(j)));
                }
                excelData.add(rowArr);
            }
            return excelData;
        }
    
        public List<String> readTitle(int titleIndexStart, int titleIndexEnd) {
            List<String> rowCell = new ArrayList<>();
            for (int i = 0; i < titleIndexEnd - titleIndexStart; i++) {
                Row titleRow = this.sheet.getRow(titleIndexStart);
                for (int j = 0; j < titleRow.getPhysicalNumberOfCells(); j++) {
                    //Cell c = titleRow.getCell(j);
                    //CellRangeAddress cra = c.getArrayFormulaRange();
                    rowCell.add(getStringCellValue(titleRow.getCell(j)));
                }
            }
            return rowCell;
        }
    
        public static boolean isMergedRegion(HSSFSheet sheet, int row, int column) {
            int sheetMergeCount = sheet.getNumMergedRegions();
            for (int i = 0; i < sheetMergeCount; i++) {
                CellRangeAddress ca = sheet.getMergedRegion(i);
    
                int firstColumn = ca.getFirstColumn();
                int lastColumn = ca.getLastColumn();
                int firstRow = ca.getFirstRow();
                int lastRow = ca.getLastRow();
                if ((row >= firstRow) && (row <= lastRow) && (column >= firstColumn) && (column <= lastColumn)) {
                    return true;
                }
            }
            return false;
        }
    
        public JSONArray readNextJsonByTitle(int titleIndex) throws FileNotFoundException, IOException {
            Row titleRow = this.sheet.getRow(titleIndex);
            List<String> rowCell = new ArrayList<>();
            for (int i = 0; i < titleRow.getPhysicalNumberOfCells(); i++) {
                rowCell.add(getStringCellValue(titleRow.getCell(i)));
            }
            JSONArray array = new JSONArray();
            JSONObject object = null;
            for (int i = titleIndex + 1; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                object = new JSONObject();
                this.row = this.sheet.getRow(i);
                for (int j = 0; j < titleRow.getPhysicalNumberOfCells(); j++) {
                    if(this.row != null && this.row.getCell(j) != null) {
                        if(StringUtils.isNotEmpty(getStringCellValue(this.row.getCell(j)))) {
                            object.put(rowCell.get(j), getStringCellValue(this.row.getCell(j)));
                        }
                    }
                }
                if(object.size() != 0) {
                    array.add(object);
                }
            }
            return array;
        }
    
        public List<ArrayList<String>> readNextByTitle(int titleIndex) throws FileNotFoundException, IOException {
            Row titleRow = this.sheet.getRow(titleIndex);
            List<ArrayList<String>> excelData = new ArrayList<>();
            for (int i = titleIndex + 1; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                ArrayList<String> rowArr = new ArrayList<>();
                this.row = this.sheet.getRow(i);
                for (int j = 0; j < titleRow.getPhysicalNumberOfCells(); j++) {
                    rowArr.add(getStringCellValue(this.row.getCell(j)));
                }
                excelData.add(rowArr);
            }
            return excelData;
        }
    
        public List<ArrayList<String>> readAllExcludeNull() throws FileNotFoundException, IOException {
            List<ArrayList<String>> excelData = new ArrayList<>();
            for (int i = 0; i < this.sheet.getPhysicalNumberOfRows(); i++) {
                ArrayList<String> rowArr = new ArrayList<>();
                this.row = this.sheet.getRow(i);
                for (int j = 0; j < this.row.getPhysicalNumberOfCells(); j++) {
                    String cellValue = getStringCellValue(this.row.getCell(j));
                    if (!cellValue.equals("")) {
                        rowArr.add(cellValue);
                    }
                }
                excelData.add(rowArr);
            }
            return excelData;
        }
    
        public ArrayList<String> readRowData(int rowIndex) throws FileNotFoundException, IOException {
            ArrayList<String> rowDataArr = new ArrayList<>();
            this.row = this.sheet.getRow(rowIndex);
            for (int i = 0; i < this.row.getPhysicalNumberOfCells(); i++) {
                String cellStr = getStringCellValue(this.row.getCell(i));
                rowDataArr.add(cellStr);
            }
            return rowDataArr;
        }
    
        public ArrayList<String> readRowExcludeNullData(int rowIndex) throws FileNotFoundException, IOException {
            ArrayList<String> rowDataArr = new ArrayList<>();
            this.row = this.sheet.getRow(rowIndex);
            for (int i = 0; i < this.row.getPhysicalNumberOfCells(); i++) {
                String cellValue = getStringCellValue(this.row.getCell(i));
                if (!cellValue.equals("")) {
                    rowDataArr.add(cellValue);
                }
            }
            return rowDataArr;
        }
    
        public String readCellData(int rowIndex, int cellIndex) throws FileNotFoundException, IOException {
            this.row = this.sheet.getRow(rowIndex);
            return getStringCellValue(this.row.getCell(cellIndex));
        }
    
        public List<? extends PictureData> readPictures() {
            return this.workbook.getAllPictures();
        }
    
        public static String getStringCellValue(Cell cell) {
            String strCell = "";
            if (cell == null) {
                return strCell;
            }
            switch (cell.getCellType()) {
                case STRING:
                    strCell = cell.getRichStringCellValue().getString().trim();
                    break;
                case NUMERIC:
                    if (DateUtil.isCellDateFormatted(cell)) {
                        // strCell = DateUtils.parseString("yyyy-MM-dd hh:mm:ss",
                        // cell.getDateCellValue());
                    } else {
                        strCell = String.valueOf(new DecimalFormat().format(cell.getNumericCellValue()));
                    }
                    break;
                case BOOLEAN:
                    strCell = String.valueOf(cell.getBooleanCellValue());
                    break;
                case FORMULA:
                    FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
                    evaluator.evaluateFormulaCell(cell);
                    CellValue cellValue = evaluator.evaluate(cell);
                    strCell = String.valueOf(cellValue.getNumberValue());
                    break;
                case BLANK:
                default:
                    strCell = "";
            }
            return strCell;
        }
    
        public ReadExcelUtil setSheetIndex(int sheetIndex) {
            this.sheetIndex = sheetIndex;
            if (this.workbook != null) {
                this.sheet = this.workbook.getSheetAt(sheetIndex);
            }
            return this;
        }
    
        public ReadExcelUtil setRowIndex(int rowIndex) {
            this.rowIndex = rowIndex;
            return this;
        }
    
        public ReadExcelUtil setCellIndex(int cellIndex) {
            this.cellIndex = cellIndex;
            return this;
        }
    
        public int getSheetCount() {
            return this.workbook.getNumberOfSheets();
        }
    
        public String getSheetNameByIndex(int index) {
            return this.workbook.getSheetAt(index).getSheetName();
        }
    
        public String getCurrentSheetName() {
            return this.workbook.getSheetAt(this.sheetIndex).getSheetName();
        }
    
        public Workbook getWorkbook() {
            return this.workbook;
        }
    
        public Sheet getSheet() {
            return this.sheet;
        }
    
        public int getSheetIndex() {
            return this.sheetIndex;
        }
    
        public String getFile() {
            return this.file;
        }
    
        public void setFile(String file) {
            this.file = file;
        }
    }
  • 相关阅读:
    C#语句2——循环语句(for循环与for循环嵌套)
    C#语言基础
    C#几种截取字符串的方法小结
    SQL提取数据库表名,字段名等信息
    Winform绑定图片的三种方式
    C#中遍历各类数据集合的方法总结
    c#winform图片绘制与图片验证码
    DataGridView根据条件给单元格绑定图片
    C#Winform 父窗体 子窗体 传值
    一条Sql语句分组排序并且限制显示的数据条数
  • 原文地址:https://www.cnblogs.com/huanglisong/p/13827269.html
Copyright © 2020-2023  润新知