如何使用Java来计算Excel文件的列行数(How to calculate number of

2019-08-04 01:30发布

我有一个从Excel文件读取数据的Java代码。 我想要计算的列(在特定列)的数量和行的总数 。 我怎样才能做到这一点? Java代码和期望的O / P在下面提供

(编辑):什么修改我应该得到的如所期望的O / P我应该写一个循环来获得行和列的数量或有做同样的方法

期望中的O / P

ColumnA ColumnB ColumnC
Vinayak James   Dan
India   US      Denmark

 Total number of Columns: 3
number of data in ColumnA:2
number of data in ColumnB:2
number of data in ColumnC:2  

(编辑): -回答这里- 在Excel工作表的一列的行的计数数(Java代码提供)

我的Java代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.ss.formula.functions.Column;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelRead {
    public static void main(String[] args) {
        int count=0;
    try {
        FileInputStream file = new FileInputStream(new File("C:/Users/vinayakp/Desktop/Book.xlsx"));
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet sheet = workbook.getSheetAt(0);
        Iterator<Row> rowIterator = sheet.iterator();
        while(rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while(cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                switch(cell.getCellType()) {
                    case Cell.CELL_TYPE_BOOLEAN:
                        System.out.print(cell.getBooleanCellValue() + "\t\t");
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.print(cell.getNumericCellValue() + "\t\t");
                        break;
                    case Cell.CELL_TYPE_STRING:
                        System.out.print(cell.getStringCellValue() + "\t\t");
                        break;
                }
            }
            System.out.println("");
        }

        file.close();    
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException ae) {
        ae.printStackTrace();
    }
}
}

输出我得到的是:

ColumnA ColumnB ColumnC
Vinayak James   Dan
India   US      Denmark

我需要得到所需O / P,如上所示。 代码工作正常,但我需要的列和行的数值。 请给我提供了相同的解决方案。 我与前面的代码在这个问题解决的问题: 问题在阅读Excel文件(Java代码)

Answer 1:

我想你可以使用代码建议在这里拿到列,然后为每行中的列(虽然它的多为行中关于POI的方式每列),仅计算你需要的值。

所以,你的代码可能会遵循的东西如下:

for(Row row : sheet) {
   short minColIx = row.getFirstCellNum();
   short maxColIx = row.getLastCellNum();
   for(short colIx = minColIx; colIx<maxColIx; colIx++) {
     Cell c = row.getCell(colIx);
     if(c != null) {
        if(c.getCellType() == Cell.CELL_TYPE_NUMERIC) {
           // add c.getNumericCellValue()
        }
     }
   }
}

从还不错的想法POI API文档与列编号工作。



Answer 2:

该代码使用迭代来解析每行和列的值。 它不知道它的就剩多少项遍历,所以你不能查询它对于这一结果。

但是你可以使用API中的最后一行指数getLastRowNum ( 参考 )。

获取表上最后一行数。 由于在Excel文件格式的特质,如果调用此方法的结果是零,你不能,如果这意味着有零行的表上,或者一个在零的位置告诉。 对于这种情况,还调用getPhysicalNumberOfRows()来判断是否有一排位置为零。

同样,对于每个小区必须API getLastCellNum在HSSFRow类( 参考 )。

你需要改变你的代码,以这些API的优势。

教程: 读/写Excel中使用Java



Answer 3:

我不熟悉与在Java代码中的Excel工作簿的工作,但你有一个迭代器就在那里。 你不能只是一个int添加到它,并增加它每次迭代?

int counter = 0;
while(rowIterator.hasNext()) {
...
counter++;
}

有了您的级联迭代器,你可以跟踪你想用几个柜台的不同数量的;

int[] counters = new int[4];
counters[0] = 0; // number of columns
counters[1] = 0; // number of rows in colA
counters[2] = 0; // number of rows in colB
counters[3] = 0; // number of rows in colC

while(rowIterator.hasNext()) {
    /* 
     * keep track of columns. Useful if colD and more may exist too, but
     * you don't want them counted
     */
    int col = 0;
    while(cellIterator.hasNext()) {
        switch(col) {
        case 0 : counters[1]++; break; // add row to colA counter
        case 1 : counters[2]++; break; // add row to colB counter
        case 2 : counters[3]++; break; // add row to colC counter
        }
        col++;
    }
    counters[0] = col; // save number of columns
}

这可能不是最好的方式提醒你,但我认为它应该工作不够好。 裸记住,我在这没有经验或者所以如果有人用溶液与XSSF类工作回答,很可能更好。 另外,我没有测试过这一点,但它至少应该为您提供一种方法。

我不知道该怎么处理XSSF的,但你可能要检查如果细胞计数之前空。 然而,通过你发布的代码来看,我想这是没有必要的。

如果你有一个变量数列(有可能的,否则,为什么算?)你应该在他们柜台可变长度的列表,并添加一个新的计数器INT每列的。 希望这可以帮助你!



文章来源: How to calculate number of rows in a column of Excel document using Java