我正在尝试从excel表(.xlsx)中的100万条记录中读取10行:
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行然后停止解析。
答案 0 :(得分:1)
我通过互联网搜索此问题,我发现最常见的方法是在您的特定条件适用时在内容处理程序中抛出运行时异常。
例如:
@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
}