精华内容
下载资源
问答
  • java获取sheet行数
    千次阅读
    2021-03-08 06:08:58

    前言

    报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。Java程序由于其跨平台特性,不能直接操纵Excel。因此,本文探讨一下POI视线Java程序进行Excel中列数和行数的读取。

    方法如下

    //获取指定行,索引从0开始

    hssfRow=hssfSheet.getRow(1);

    //获取指定列,索引从0开始

    hssfCell=hssfRow.getCell((short)6);

    //获取总行数

    //int rowNum=hssfSheet.getLastRowNum();

    //获取一个excel表格中的总记录数

    int rowNum=storagesList.size();

    //获取总列数

    int columnNum=hssfRow.getPhysicalNumberOfCells();

    FileInputStream inp = new FileInputStream("E:\\WEIAN.xls");

    HSSFWorkbook wb = new HSSFWorkbook(inp);

    HSSFSheet sheet = wb.getSheetAt(2); // 获得第三个工作薄(2008工作薄)

    // 填充上面的表格,数据需要从数据库查询

    HSSFRow row5 = sheet.getRow(4); // 获得工作薄的第五行

    HSSFCell cell54 = row5.getCell(3);// 获得第五行的第四个单元格

    cell54.setCellValue("测试纳税人名称");// 给单元格赋值

    //获得总列数

    int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();

    int rowNum=sheet.getLastRowNum();//获得总行数

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Java能带来一定的帮助,如果有疑问大家可以留言交流。

    时间: 2016-12-17

    更多相关内容
  • java使用POI获取sheet行数、列数
  • * 获取sheet表单里的有效行数 * @param sheet * @return */ public int getRealRowNum(Sheet sheet) { int rowNum = sheet.getLastRowNum()-1; while(rowNum > 0 ){ Row row = sheet.getRow(rowNum+1); ...
    /**
         * 获取sheet表单里的有效行数
         * @param sheet
         * @return
         */
        public int getRealRowNum(Sheet sheet) {
            int rowNum = sheet.getLastRowNum()-1;
            while(rowNum > 0 ){
                Row row = sheet.getRow(rowNum+1);
                if (row != null) {
                    for (Cell cell : row) {
                        if (!StringUtils.isEmpty(cell.getStringCellValue()));
                        return rowNum;
                    }
                }
                rowNum--;
            }
            return rowNum;
        }
     /**
         * 用来得到真实行数
         * @param sheet 需要读取的Excel表格(excel文件的工作簿的名称)
         * @return
         *
         */
        public static int readExcelValueRows(Sheet sheet) {
            int realRow = 0;// 返回的真实行数
            // 标题行有几行就从几开始
            for (int i = 2; i <= sheet.getLastRowNum(); i++) {
                //i从1开始,不判断第一行标题行
                Row row = sheet.getRow(i);
                if (row == null){
                    continue;
                }
                for (Cell cell : row) {
                    if (cell == null){
                        continue;
                    }
                    String value = cell.getStringCellValue().trim();
                    if (value == null || "".equals(value)){
                        continue;
                    } else{
                        realRow++;
                        break;
                    }
                }
            }
            return realRow;
        }

    展开全文
  • Java获取Excel表格的真实行数

    千次阅读 2020-04-29 14:15:21
    } /** * 获取excel表格的真实行数 * @param sheet excel文件的工作簿的名称 * @return */ public static int getExcelRealRow(Sheet sheet) { boolean flag = false; for (int i = 1; i <= sheet.getLastRowNum(); ...

    在没有格式的前提下,

    • 使用getLastRowNum方法能够正确返回最后一行的位置;
    • 使用getPhysicalNumberOfRows方法能够正确返回物理的行数

    但是一般上传的表格中存在格式,所以需要读取每个行列中的数据进行判断

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    
    public class ReadExcelTest {
    
        /**
         * 用来判断每一列中的数据类型
         * @param cell 需要读取的列
         * @return
         *
         */
        public static String getValue(Cell cell){
            String cellValue = "";
            switch (cell.getCellType()) {
                case Cell.CELL_TYPE_STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case Cell.CELL_TYPE_BOOLEAN:
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                case Cell.CELL_TYPE_NUMERIC:
                    if (DateUtil.isCellDateFormatted(cell)) {
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        cellValue = sdf.format(cell.getDateCellValue());
                    }else{
                        DataFormatter dataFormatter = new DataFormatter();
                        cellValue = dataFormatter.formatCellValue(cell);
                    }
                    break;
                default:
                    cellValue = "";
                    break;
            }
            return cellValue;
        }
    
    
        /**
         * 用来得到真实行数
         * @param sheet 需要读取的Excel表格(excel文件的工作簿的名称)
         * @return
         *
         */
        public static int readExcelValueRows(Sheet sheet) {
            int realRow = 0;// 返回的真实行数
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                //i从1开始,不判断第一行标题行
                Row row = sheet.getRow(i);
                if (row == null){
                    continue;
                }
                for (Cell cell : row) {
                    if (cell == null){
                        continue;
                    }
                    String value = getValue(cell).trim();
                    if (value == null || "".equals(value)){
                        continue;
                    } else{
                        realRow++;
                        break;
                    }
                }
            }
            return realRow;
        }
    
        /**
         * 获取excel表格的真实行数
         * @param sheet excel文件的工作簿的名称
         * @return
         */
        public static int getExcelRealRow(Sheet sheet) {
            boolean flag = false;
            for (int i = 1; i <= sheet.getLastRowNum(); ) {
                Row r = sheet.getRow(i);
                if (r == null) {
                    // 如果是空行(即没有任何数据、格式),直接把它以下的数据往上移动
                    sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
                    continue;
                }
                flag = false;
                for (Cell c : r) {
                    if (c.getCellType() != Cell.CELL_TYPE_BLANK) {
                        flag = true;
                        break;
                    }
                }
                if (flag) {
                    i++;
                    continue;
                } else {
                    // 如果是空白行(即可能没有数据,但是有一定格式)
                    if (i == sheet.getLastRowNum())// 如果到了最后一行,直接将那一行remove掉
                        sheet.removeRow(r);
                    else//如果还没到最后一行,则数据往上移一行
                        sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
                }
            }
            return sheet.getLastRowNum();
        }
    
        public static void main(String[] args) throws IOException {
            File file = new File("D:\\test.xlsx");
            String fileName = file.getName();
            Workbook workbook = null;
            FileInputStream fileInputStream = new FileInputStream(file);
            // excel类型
            if (fileName.endsWith(".xls")) {
                workbook = new HSSFWorkbook(fileInputStream);
            } else if (fileName.endsWith(".xlsx")) {
                workbook = new XSSFWorkbook(fileInputStream);
            }
            Sheet sheet1 = workbook.getSheet("sheet1"); // excel文件的工作簿的名称
            Sheet sheet2 = workbook.getSheet("sheet2"); // excel文件的工作簿的名称
            // 不作处理时获取的行数
            int lastRowNum1 = sheet1.getLastRowNum();
            // 获取物理行数
            int rows = sheet1.getPhysicalNumberOfRows();
            // 获取Excel工作簿的真实行数(非空行,即有数据的行)
            int lastRowNum2 = readExcelValueRows(sheet1);
            int lastRowNum3 = getExcelRealRow(sheet1);
    
            System.out.println("************sheet1**************");
            System.out.println("rows:" + rows);
            System.out.println("lastRowNum1:" + lastRowNum1);
            System.out.println("lastRowNum2:" + lastRowNum2);
            System.out.println("lastRowNum3:" + lastRowNum3);
            System.out.println("************sheet2**************");
            System.out.println("lastRowNum4:" + sheet2.getPhysicalNumberOfRows());
            System.out.println("lastRowNum5:" + sheet2.getLastRowNum());
            System.out.println("lastRowNum6:" + readExcelValueRows(sheet2));
            System.out.println("lastRowNum7:" + getExcelRealRow(sheet2));
        }
    }
    
    

    sheet1:
    在这里插入图片描述
    sheet2:
    在这里插入图片描述

    ************sheet1**************
    rows:11 # sheet1的物理行数
    lastRowNum1:10 
    lastRowNum2:10
    lastRowNum3:10
    ************sheet2**************
    lastRowNum4:13 # sheet1的物理行数
    lastRowNum5:14 # 未忽略空白行
    lastRowNum6:12
    lastRowNum7:12
    

    参考文章链接:
    https://www.8090mc.cn/278.html
    https://www.cnblogs.com/maogege/p/10495389.html

    展开全文
  • 这篇文章主要介绍了java如何利用POI读取Execel行数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下java 利用poi 读excel文件的操作,读取总的数据行数一般是...

    这篇文章主要介绍了java如何利用POI读取Execel行数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java 利用poi 读excel文件的操作,读取总的数据行数一般是通过调用 sheet.getLastRowNum() ;可是这样有时候会出现一些问题,例如,当其中一行的数据的确都为空,可是其原本的格式还在,并没有连带删除,这样计算出来的行数就不真实(比真实的大),还有当出现空白行时(也即某一行没有任何数据,通过Row row = sheet.getRow(i) 返回的row值为null),计算出来的值也不正确。

    本人自己写了一个方法来对excel表进行过滤,将那些没有意义的行删掉,之后再调用sheet.getLastRowNum() 得到的值就是正确的了。

    说明一下,本程序是结合自己项目的需求编写的,对于那些空白行有意义的excel文件来说,本文不存在参考价值。

    package test;

    import java.io.FileInputStream;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    import org.apache.poi.hssf.util.CellReference;

    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;

    public class test2{

    public static void main(String[] args) {

    Workbook wb = null;

    try {

    wb = new HSSFWorkbook(new FileInputStream("E:\\Workspaces\\testdata\\仓库数据.xls"));

    } catch (Exception e) {

    //

    }

    Sheet sheet = wb.getSheetAt(0);

    CellReference cellReference = new CellReference("A4");

    boolean flag = false;

    System.out.println("总行数:"+(sheet.getLastRowNum()+1));

    for (int i = cellReference.getRow(); i <= sheet.getLastRowNum();) {

    Row r = sheet.getRow(i);

    if(r == null){

    // 如果是空行(即没有任何数据、格式),直接把它以下的数据往上移动

    sheet.shiftRows(i+1, sheet.getLastRowNum(),-1);

    continue;

    }

    flag = false;

    for(Cell c:r){

    if(c.getCellType() != Cell.CELL_TYPE_BLANK){

    flag = true;

    break;

    }

    }

    if(flag){

    i++;

    continue;

    }

    else{//如果是空白行(即可能没有数据,但是有一定格式)

    if(i == sheet.getLastRowNum())//如果到了最后一行,直接将那一行remove掉

    sheet.removeRow(r);

    else//如果还没到最后一行,则数据往上移一行

    sheet.shiftRows(i+1, sheet.getLastRowNum(),-1);

    }

    }

    System.out.println("总行数:"+(sheet.getLastRowNum()+1));

    }

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • Java 读取Excel获取真实行数

    万次阅读 2018-11-08 09:56:51
     * 所以,在做导入excel的时候,建议想要正确获取行数,可以做一个人为的约定,比如约定导入文件第一列不允许为空,行数就按照第一列的有效行数来统计;这样就能正确获取到实际想要的行数; 更新版本, 因为发现有...
  • Java使用Workbook/Sheet读取excel行数

    千次阅读 2019-07-08 19:57:57
    ### WorkBook/Sheet简介 ... * 获取excel文件实际行数 * * @param file */ public static int readFileLength(MultipartFile file) { // 文件函数 int lineLength = 0; // 声明workbook对象
  • import java.io.FileInputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi....
  • 获取工作表上的最后一行注意:Excel和Apache POI可能仍将之前具有内容并稍后设置为空的行计为行,因此此方法的结果将包括此类行,因此返回值可能会更高超出预期! 返回值: 此工作表中包含的最后一行(从0开始);...
  • 我不确定,但是我知道此方法会返回曾经被"声明过"的行数。 警告:如果工作表中有空白行,则getPhysicalNumberOfRows不将它们包括在返回的计数中。但是,getLastRowNum也完全按照其提示进行操作。因此,要遍历所有行...
  • Java 使用poi包 读excel文件时,获取指定sheet页中数据行数可以通过调用 sheet.getLastRowNum() ;但这种方法仅限于当前sheet页中没有带格式的空白行时。如果其中一行的数据都为空,但是其原本的格式还在,此时使用...
  • FileInputStream inp = new FileInputStream("E:\\WEIAN.xls");... HSSFSheet sheet = wb.getSheetAt(2); // 获得第三个工作薄(2008工作薄) // 填充上面的表格,数据需要从数据库查询 HSSFRow ...
  • poi获取实际行数

    2015-12-20 01:56:10
    最近在学习POI POI的API没有真正的获取填写数据的行数 我在网上找到了 与其分享
  • java 读取excel获取真实行数

    万次阅读 2017-02-15 10:13:40
    读取excel获取真实行数 公司采用的是apache提供的包,通过XML文件的映射,把EXCEL表和我们的Model对应起来.本来是校验正确的,结果莫名其妙到后面就会报空指针异常.  问题的原因:在没有格式的前提下,...
  • // 获得总记录数(行数) int lastRowNum = sheet.getLastRowNum(); int rowNum=sheet....java - poi - excel导入用 getLastRowNum() 获取行数不正确,拿到的行数总是比实际的多,但是打开excel表格看却又
  • private List realNumberOfRow(HSSFSheet sheet){ int realNums = 0; int firstNum = sheet.getFirstRowNum(); int lastNum = sheet.getLastRowNum();...//获取每个有值的行数下标 for (int i=f
  • 主要介绍了java导出包含多个sheet的Excel,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 07版本excel最大为10万行数、 comExcelList得对象使用注解做的@ExcelSheet(name = “组件”) ** String name="sheet"; ExportUtil.exportToWeb(request, response, fileName, comExcelList,name); package ...
  • 于是,我换了中方式来获取excel的数据行数(校验excel是否存在数据),今天把我修改的代码记录下来分享给大家~~ 准备工作 1、准备测试数据(第5.6行只设置了行高,没有赋值): 2 jar包引入 <dependency>

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,636
精华内容 3,454
关键字:

java获取sheet行数