2016-05-15 12 views
0

我新使用eventusermodel上傳xls文件.. 我有一些關於閱讀工作表的問題..爲什麼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事件解析支持的最好的例子之一是EventBasedExcelExtractor shipped as part of Apache POI。如果您通過閱讀,你會看到TYPE_WORKSHEET類型的BOFRecord在新表的開始觸發

所以,你想你的代碼更改爲類似:

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"); 
.... 

而且趕在外面是例外完成了

你也可能要使用AbortableHSSFListener不得不終止清潔的方式,當你打第二片

相關問題