2017-04-17 7 views
3

私はAndroidから、Excelを読み込むアプリケーションを持っています。 whileループを置き換えてforループを入れたいと思います。私は3列しか持っていないので、私はtheresがこれを行う別の方法だと思う。行と列だけを使ってforループを使ってループを実行する方法を教えてください。行と固定数の列でのみ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

これはhttp://stackoverflow.com/q/16215750/2296441の複製で、apache POIサイトのhttps://poi.apache.org/spreadsheet/quick-guide.html#Iterator – jmarkmurphy

+0

にも回答しています私の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

さてあなたは、行と列のサイズを持っている場合、それはアンドロイドよりもアルゴリズムの多くはであるあなたは、細胞をループができます。

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(); 
} 

を、それはバグや2を持っているかもしれないが、私はそれはあなたのような作品が欲しいと思います。

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ライブラリのワークブックClassを使用して行っています。 [blog]:http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/jxl/Workbook.html/ "JExcel Documentation"のドキュメントをご覧ください。

ここで注意すべきことは、getCellが行と列のパラメータを受け入れる方法です。これらのパラメータを渡すと、別の方法で例外が発生します。

関連する問題