2015-03-05 12 views
0

Я пытаюсь прочитать 10 строк из 1 миллиона записей в листе Excel (.xlsx):синтаксического анализа часть XLSX файла с помощью пои xssf и саксофон анализатор

  FileInputStream myFile = new FileInputStream(file); 
      OPCPackage pkg = OPCPackage.open(myFile); 
      XSSFReader reader = new XSSFReader(pkg); 

      MySheetContentHandler sheetHandler = new MySheetContentHandler(); 

      StylesTable styles = reader.getStylesTable(); 
      ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg); 
      ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, sheetHandler, true); 

      XMLReader parser = XMLReaderFactory.createXMLReader(); 
      parser.setContentHandler(handler); 

      parser.parse(new InputSource(reader.getSheetsData().next())); 

      pkg.close(); 

И MySheetContentHandler:

@Override 
public void cell(String cellReference, String formattedValue) { 

    getRowList.add(formattedValue); 
    if (count == 0) { 
     columnsId.add(String.valueOf(columnCount++)); 
    } 

} 

@Override 
public void endRow() { 
    if (myNewList.size() < maxRecord) { 
     myNewList.add(getRowList); 
    } 
} 

@Override 
public void headerFooter(String arg0, boolean arg1, String arg2) { 

} 

@Override 
public void startRow(int rowNum) { 
    getRowList = new ArrayList<String>(); 
    if (rowNum == 0) { 
     count = 0; 
    } else { 
     count++; 
    } 
} 

При вызове метода parser.parse(new InputSource(reader.getSheetsData().next())); весь файл анализируется, и требуется время, все, что я хочу, - это проанализировать только первые 10 строк и затем прекратить разбор.

+1

Я нашел хороший ответ в этой ссылке [стоп-парсера SAX] [1] [1]: http://stackoverflow.com/questions/1345293/how-to-stop-parsing-xml -document-с-саксофона-на-любой-время –

ответ

1

Я прошел через Интернет в поисках этой проблемы, наиболее распространенным способом, который я нашел, является выброс исключений Runtime в обработчик содержимого, когда применимо ваше конкретное условие.

Например:

@Override 
public void startRow(int rowNum) { 
    getRowList = new ArrayList<String>(); 
    if (rowNum == 0) { 
     count = 0; 
    } else { 
     count++; 
    } 

    if(count > SOME_LIMIT) 
    throw new MyParsingTerminationException(); 
} 

Затем, вы должны поймать это исключение вокруг метода синтаксического анализа.

try { 
    parser.parse(new InputSource(reader.getSheetsData().next())); 
} catch (MyParsingTerminationException e) { 
    // handle the termination 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^