2017-04-17 45 views
3

我有一个应用程序在Android中读取从Excel中。我想替换while循环并放置for循环。我只有3列,所以我认为这是另一种方式来做到这一点。你可以告诉我如何做到这一点while循环使用for循环只使用行和3列?如何仅使用行和固定数量的列执行for循环?

private void readExcelFile() { 

     try{ 


      String inFileName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/"+"ola.xlsx"; 

      File file = new File(inFileName); 
      Workbook workBook = WorkbookFactory.create(file); 
      Sheet sheet = workBook.getSheetAt(0); 


      Iterator<Row> rowIter = sheet.rowIterator(); 
//this is the loop I talked about 
      while(rowIter.hasNext()){ 


       Row myRow =rowIter.next(); 
       Iterator<Cell> cellIter = myRow.cellIterator(); 


       while(cellIter.hasNext()){ 
        Cell myCell = cellIter.next(); 





        Toast.makeText(getApplicationContext(), "cell Value: " + myCell.toString(), Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }catch (Exception e){e.printStackTrace(); } 

     return; 
    } 
+0

[如何在java中执行excel的单元迭代]可能的副本(http://stackoverflow.com/questions/16215750/how-to-do-cell-iteration-of-excel-in-java) – jmarkmurphy

+1

This是http://stackoverflow.com/q/16215750/2296441的副本,并在此处的apache POI网站上也有答案https://poi.apache.org/spreadsheet/quick-guide.html#Iterator – jmarkmurphy

+0

Tha does没有解决问题,因为我的Cell类没有getCell方法。我需要使用这个确切的形式。所以我需要一个不同的逻辑,使用那里存在的相同变量 – jose

回答

0
// ... alternate looping logic using for loops 
Sheet sheet = workBook.getSheetAt(0); 

for (int row = 0; row < sheet.getColumns(); row++) { 
     for (int column = 0; column < sheet.getRows(); column++) { 
     Cell cell = sheet.getCell(column, row); 
     Toast.makeText(getApplicationContext(), "cellValue: " + cell.toString(), Toast.LENGTH_SHORT).show(); 
     } 
} 

我看着JExcel库,它有GetRows的& getColumns方法,返回无。行分别为&列。因此,我能够迭代使用for循环而不是使用迭代器。

+0

虽然此代码片段可能会解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 – jmattheis

+0

请注意,这只会在没有空单元格或行的情况下起作用 – jmarkmurphy

+0

它也适用于空单元格。 –

0

那么它比Android更算法就可以通过细胞循环,如果你有行和列的尺寸:

int totalCount = rowSize * columnSize; 
Iterator<Cell> rowIter = sheet.rowIterator(); 
Iterator<Cell> cellIter; 

for(int i = 0 ; i < totalCount ; i++){ 
    if(i % rowSize == 0){ 
     //Move to the Next Row 
     myRow = rowIter.next(); 
     cellIter = myRow.cellIterator(); 
    } 

    Cell myCell = cellIter.next(); 
} 

虽然它可能有一个或两个错误,但我认为它会像你的作品想。

0
String FilePath = "E://airline.xls"; 
FileInputStream fs = new FileInputStream(FilePath); 
Workbook wb = Workbook.getWorkbook(fs); 
Sheet sh = wb.getSheet("Sheet2"); 
for(int row = 0; row < sh.getRows(); row++){ 
    for(int column = 0; column < sh.getColumns(); column++){ 
     System.out.print(sh.getCell(column, row).getContents() + " "); 
    } 
} 

我已经使用JExcel库的工作簿类来完成此操作。请查看[博客]处的文档:http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/jxl/Workbook.html/“JExcel文档”。

这里需要注意的是getCell接受行和列参数。如果我们通过这些参数,我们将得到异常。