zoukankan      html  css  js  c++  java
  • java poi reader常用API汇总

     注意:
    (1)判断行的最大数量建议使用sheet.getLastRowNum();
    (2)判断每行最大列数建议使用row.getLastCellNum();

    【JAVA】特别注意,POI中getLastRowNum() 和getLastCellNum()的区别
    hssfSheet.getLastRowNum();//最后一行的下标,编号从0开始,即比行数小1。如果sheet中一行数据都没有,则返回-1,只有第一行有数据时,返回0
    hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1.如果row中一列数据都没有,则返回-1,只有第一列有数据时,返回1

    getLastRowNum()获取的是最后一行的编号(编号从0开始)。

    int org.apache.poi.ss.usermodel.Sheet.getLastRowNum()

    Gets the last row on the sheet
    Returns: last row contained in this sheet (0-based)

    getPhysicalNumberOfRows  
    获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m;
    
    getPhysicalNumberOfCells   
    获取有记录的列数,即:最后有数据的列是第n列,前面有m列是空列没数据,则返回n-m;

    getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况。
    int org.apache.poi.ss.usermodel.Sheet.getPhysicalNumberOfRows()

    Returns the number of physically defined rows (NOT the number of rows in the sheet)

    java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式
    当使用POI处理excel的时候,遇到了比较长的数字,虽然excel里面设置该单元格是文本类型的,但是POI的cell的类型就会变成数字类型。 
    而且无论数字是否小数,使用cell.getNumbericCellValue() 去获取值的时候,会得到一个double,而且当长度大一点的时候会变成科学计数法形式。 
    那么获取这个单元格的原始的数据,就其实是一个double怎么转换成整数的问题了。 
    使用DecimalFormat对这个double进行了格式话,随后使用format方法获得的String就是你想要的值了。 
    DecimalFormat df = new DecimalFormat("0");  
    String whatYourWant = df.format(cell.getNumericCellValue());  

    单元格内容换行:
    Java利用POI生成Excel强制换行
    1. 首先在需要强制换行的单元格里使用poi的样式,并且把样式设定为自动换行

    HSSFCellStyle cellStyle=workbook.createCellStyle();       
    cellStyle.setWrapText(true);       
    cell.setCellStyle(cellStyle); 

    2. 其次是在需要强制换行的单元格,使用/就可以实再强制换行

    换行用" ",和文本分开

    HSSFCell cell = row.createCell((short)0);    
    cell.setCellStyle(cellStyle);                           
    cell.setCellValue(new HSSFRichTextString("hello/r/n world!"));
    public class ImportExcel {
        
        private static Logger log = LoggerFactory.getLogger(ImportExcel.class);
                
        /**
         * 工作薄对象
         **/
        private Workbook wb;
        
        /**
         * 工作表对象
         **/
        private Sheet sheet;
        
        /**
         * 标题行号
         */
        private int headerNum;
        
        /**
         * 构造函数
         * @param path 导入文件,读取第1个工作表
         * @param headerNum 标题行号,数据行等于标题行号+1
         * @throws InvalidFormatException 
         * @throws IOException 
         */
        public ImportExcel(String fileName, int headerNum) 
                throws InvalidFormatException, IOException {
            this(new File(fileName), headerNum);
        }
        
        /**
         * 构造函数
         * @param path 导入文件对象,读取第1个工作表
         * @param headerNum 标题行号,数据行等于标题行号+1
         * @throws InvalidFormatException 
         * @throws IOException 
         */
        public ImportExcel(File file, int headerNum) 
                throws InvalidFormatException, IOException {
            this(file, headerNum, 0);
        }
    
        /**
         * 构造函数
         * @param path 导入文件
         * @param headerNum 标题行号,数据行等于标题行号+1
         * @param sheetIndex 工作表编号,以0开始
         * @throws InvalidFormatException 
         * @throws IOException 
         */
        public ImportExcel(String fileName, int headerNum, int sheetIndex) 
                throws InvalidFormatException, IOException {
            this(new File(fileName), headerNum, sheetIndex);
        }
        
        /**
         * 构造函数
         * @param path 导入文件对象
         * @param headerNum 标题行号,数据行等于标题行号+1
         * @param sheetIndex 工作表编号,以0开始、
         * @throws InvalidFormatException 
         * @throws IOException 
         */
        public ImportExcel(File file, int headerNum, int sheetIndex) 
                throws InvalidFormatException, IOException {
            this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);
        }
        
        /**
         * 构造函数
         * @param file 导入文件对象
         * @param headerNum 标题行号,数据行等于标题行号+1
         * @param sheetIndex 工作表编号,以0开始、 
         * @throws InvalidFormatException 
         * @throws IOException 
         */
    
    
        /**
         * 构造函数
         * @param path 导入文件对象
         * @param headerNum 标题行号,数据行等于标题行号+1
         * @param sheetIndex 工作表编号,以0开始、
         * @throws InvalidFormatException 
         * @throws IOException 
         */
        public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex) 
                throws InvalidFormatException, IOException {
            if (StringUtils.isBlank(fileName)){
                throw new RuntimeException("导入文档为空!");
            }else if(fileName.toLowerCase().endsWith("xls")){    
                this.wb = new HSSFWorkbook(is);    
            }else if(fileName.toLowerCase().endsWith("xlsx")){  
                this.wb = new XSSFWorkbook(is);
            }else{  
                throw new RuntimeException("文档格式不正确?");
            }  
            if (this.wb.getNumberOfSheets()<sheetIndex){
                throw new RuntimeException("文档中没有工作表!");
            }
            this.sheet = this.wb.getSheetAt(sheetIndex);
            this.headerNum = headerNum;
            log.debug("Initialize success.");
        }
        
        /**
         * 获取行对象
         * @param rownum
         * @return
         */
        public Row getRow(int rownum){
            return this.sheet.getRow(rownum);
        }
    
        /**
         * 获取数据行号
         * @return
         */
        public int getDataRowNum(){
            return headerNum+1;
        }
        
        /**
         * 获取工作表中的最后一行的行号,以0开始
         * @return
         */
        public int getLastDataRowNum(){
            return this.sheet.getLastRowNum();
        }
        
        /**
         * 获取一行记录总的列数
         * @return
         */
        public int getLastCellNum(){
            return this.getRow(headerNum).getLastCellNum();
        }
        
        /**
         * 获取单元格的值
         * @param row 获取的行
         * @param column 获取单元格列号
         * @return 单元格的值
         */
        public Object getCellValue(Row row, int column){
            Object val = "";
            try{
                Cell cell = row.getCell(column);
                if (cell != null){
                    if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
                        val = cell.getNumericCellValue();
                    }else if (cell.getCellType() == Cell.CELL_TYPE_STRING){
                        val = cell.getStringCellValue();
                    }else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA){
                        val = cell.getCellFormula();
                    }else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){
                        val = cell.getBooleanCellValue();
                    }else if (cell.getCellType() == Cell.CELL_TYPE_ERROR){
                        val = cell.getErrorCellValue();
                    }
                }
            }catch (Exception e) {
                return val;
            }
            return val;
        }
        /**
         * 导入测试
         */
        public static void main(String[] args) throws Throwable {
            ImportExcel ei = new ImportExcel("import.xls", 0);
            System.out.println(ei.getLastDataRowNum());
            System.out.println(ei.getDataRowNum());
            
            for (int i = ei.getDataRowNum(); i <= ei.getLastDataRowNum(); i++) {
                Row row = ei.getRow(i);
                System.out.println("Row num:"+i);
                for (int j = 0; j < ei.getLastCellNum(); j++) {
                    Object val = ei.getCellValue(row, j);
                    System.out.print(val+", ");
                }
                System.out.print("
    ");
            }
            
        }
    
    }
  • 相关阅读:
    可重入函数
    epoll源码深度剖析
    数据结构学习之基本概念
    机器学习算法原理与编程实践之朴素贝叶斯分类
    机器学习算法与编程实践之中文文本分类
    ElasticSearch常用结构化搜索
    linux几种常见的文件内容查找和替换命令
    List遍历时删除遇到的问题
    初学ElasticSeacher
    从jar中读取资源文件的问题
  • 原文地址:https://www.cnblogs.com/softidea/p/3746723.html
Copyright © 2011-2022 走看看