在我的应用程序中没有得到正确的行数或值(Apache poi)

在这个应用程序中,我通过使用apache-poi来读取xlsx文件,但是我没有获取行号,它也提供了其他一些数据,请检查我的代码并输出。

这是我的代码:

public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        // c => cell
        System.out.println("The Value of Row is : "+attributes.getValue("r"));
        if(name.equals("c")) {
            // Print the cell reference
            // Figure out if the value is an index in the SST
            String cellType = attributes.getValue("t");
            if(cellType != null && cellType.equals("s")) {
                nextIsString = true;
            } else {
                nextIsString = false;
            }
        }

当我通过使用下面的行打印行号时,我正在输出下面。

System.out.println("The Value of Row is : "+attributes.getValue("r"));

输出是:

The Value of Row is : null The Value of Row is : 1 The Value of Row is : A1 The Value of Row is : null The Value of Row is : B1 The Value of Row is : null The Value of Row is : C1 The Value of Row is : null The Value of Row is : D1
The Value of Row is : null
The Value of Row is : E1
The Value of Row is : null
The Value of Row is : F1
The Value of Row is : null
The Value of Row is : G1
The Value of Row is : null
The Value of Row is : H1
The Value of Row is : null
The Value of Row is : I1
The Value of Row is : null
The Value of Row is : J1
The Value of Row is : null
The Value of Row is : AMD1
The Value of Row is : AME1
The Value of Row is : AMF1
The Value of Row is : AMG1
The Value of Row is : AMH1
The Value of Row is : AMI1
The Value of Row is : AMJ1
The Value of Row is : 2
The Value of Row is : A2
The Value of Row is : null
The Value of Row is : B2
The Value of Row is : null
The Value of Row is : C2
The Value of Row is : null
The Value of Row is : D2

我怎样才能得到行号? 1,2,3,4,5,6,.....那样?

我如何获得总列数和行数?


正如评论中所述,这不是使用apache poi读取Excel表单的默认方式。 请阅读https://poi.apache.org/spreadsheet/quick-guide.html。 特别是https://poi.apache.org/spreadsheet/quick-guide.html#Iterator。

对于你的sax.ContentHandler代码:

Excel工作表的XML如下所示:

...
<sheetData>
 <row r="1">
  <c r="A1">
   <v>1</v> 
  </c>
  <c r="B1">
   <v>2</v> 
  </c>
 </row>
...

如你所见,有不同的元素,不仅是行,“r”属性在这些元素中有不同的含义。 在元素“v”中它是空的。

所以你必须首先检查你是否有一个行元素:

...
if(name.equals("row")) { 
   System.out.println("The Value of Row is : "+attributes.getValue("r"));
 }

但是,如上所述,我不知道这是否是真正适合您的最佳方式。

编辑:

从你评论如果你有多达一百万行,然后使用sax.ContentHandler代码将是一个很好的方法。 所以对于你的具体问题,正如我所说:

public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        // c => cell
        if(name.equals("row")) {
             System.out.println("The Value of Row is : "+attributes.getValue("r"));
        }
...

您提供的代码似乎是SAX解析,而不是Apache POI。 您可以使用POI获取行号的方式之一(代码位于Java 7中):

InputStream excelFileToRead = new FileInputStream("path to path to excel/xlsx file");

try(XSSFWorkbook workbook = new XSSFWorkbook(excelFileToRead);){
XSSFSheet sheet = workbook.getSheetAt(0); // first sheet
Iterator<Row> rows = sheet.rowIterator(); // rows iterator
...

while(rows.hasNext()){  
    XSSFRow row = (XSSFRow) rows.next();
    int rowNum = row.getRowNum(); // Get the row number

    // Reading cell values
    Iterator cells = row.cellIterator();        
    while (cells.hasNext()){
        cell = (XSSF) cells.next();

        if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING){
            System.out.print(cell.getStringCellValue()+" ");
        }
        else if(cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC){
            System.out.print(cell.getNumericCellValue()+" ");
        }else{
                //handle the rest etc.
        }
    }

    ...................

}

} catch (IOException e) {
e.printStackTrace();
}
链接地址: http://www.djcxy.com/p/37985.html

上一篇: In my application not getting proper row number or value .(Apache poi)

下一篇: Reading excel files .xlsx via Java