2016-05-15 4 views
0

私はxlsファイルをアップロードするためにeventusermodelを使用しています。 私はシートを読むことについていくつかの問題があります..なぜeventusermodelがすべてのシートを読みましたか? 変更方法私はこれが唯一の最初のシートを読ん作るために変更する必要がありますラインJava - EventUserModel - なぜHSSFListenerがすべてのシートを読み取ったのですか?

public void processRecord(Record record) 
{ 
    if(record.getSid()==RowRecord.sid){ 
     newrowrec = (RowRecord) record; 
     System.out.println("new ROW NUMBER : "+ newrowrec.getRowNumber()); 
     System.out.println("new LAST ROW NUMBER : "+ newrowrec.getLastCol()); 
    } 
    switch (record.getSid()) 
    { 
     case BOFRecord.sid: 
      BOFRecord bof = (BOFRecord) record; 
      if (bof.getType() == bof.TYPE_WORKBOOK) 
      { 
       System.out.println("Encountered workbook"); 
       // assigned to the class level member 
      } else if (bof.getType() == bof.TYPE_WORKSHEET) 
      { 
       System.out.println("Encountered sheet reference"); 
      } 
      break; 
     case RowRecord.sid: 
      RowRecord rowrec = (RowRecord) record; 
      System.out.println("Row found, first column at " 
        + rowrec.getFirstCol() + " last column at " + rowrec.getLastCol()); 
      break; 
     case NumberRecord.sid: 
      NumberRecord numrec = (NumberRecord) record; 
      System.out.println("Cell found with value " + (long)numrec.getValue() 
        + " at row " + numrec.getRow() + " and column " + numrec.getColumn()); 
      rowlist.add(String.valueOf((long)(numrec.getValue())).toLowerCase()); 

      if(numrec.getColumn()==newrowrec.getLastCol()-1){ 
       System.out.println("NUMBER ROWLIST: "+ rowlist); 
       extractRow(rowlist, newrowrec.getRowNumber()); 
       rowlist.clear(); 
      } 
      break; 

     case BlankRecord.sid: 
      BlankRecord blankrec = (BlankRecord) record; 
      System.out.println("BLANK VALUE at row: "+ blankrec.getRow() + " at coloumn: " + blankrec.getColumn()); 
      rowlist.add("null"); 
      break; 
     case SSTRecord.sid: 
      sstrec = (SSTRecord) record; 
      for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) 
      { 
       System.out.println("String table value " + k + " = " + sstrec.getString(k)); 
        System.out.println("SSTRECORD ROWLIST: "+ rowlist); 
      } 
      break;   
     case LabelSSTRecord.sid: 
      lrec = (LabelSSTRecord) record; 
      rowlist.add(sstrec.getString(lrec.getSSTIndex()).toString()); 
      break; 
    } 

:私はちょうどここに私のコード例がある ...最初のシートで読む私のプログラムにしたいですか?

答えて

0

HSSFイベント解析サポートの最良の例の1つはEventBasedExcelExtractor shipped as part of Apache POIです。

int seenSheets = 0; 

.... 

if(record.getSid()==RowRecord.sid){ 
    newrowrec = (RowRecord) record; 
    System.out.println("new ROW NUMBER : "+ newrowrec.getRowNumber()); 
    System.out.println("new LAST ROW NUMBER : "+ newrowrec.getLastCol()); 
} 
switch (record.getSid()) 
{ 
    seenSheets++; 
    if (seenSheets > 1) { 
     throw new Exception("Sheet done"); 
.... 

そして:あなたはそれを読んでいる場合は、あなたのような何かにあなたのコードを変更したいと思う、タイプTYPE_WORKSHEETBOFRecord

だから、新しいシートの開始時にトリガーすることがわかります外にその例外をキャッチして終了する

AbortableHSSFListenerを使用して、2枚目のシートにヒットしたときによりクリーンな方法で終了することができます。

関連する問題