在我的应用程序中没有得到正确的行数或值(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)