You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.5 KiB
77 lines
2.5 KiB
5 years ago
|
package com.alibaba.excel.analysis.v03.handlers;
|
||
|
|
||
5 years ago
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
|
||
5 years ago
|
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder;
|
||
|
import org.apache.poi.hssf.record.BOFRecord;
|
||
|
import org.apache.poi.hssf.record.BoundSheetRecord;
|
||
|
import org.apache.poi.hssf.record.Record;
|
||
|
|
||
5 years ago
|
import com.alibaba.excel.analysis.v03.AbstractXlsRecordHandler;
|
||
|
import com.alibaba.excel.context.AnalysisContext;
|
||
|
import com.alibaba.excel.read.metadata.ReadSheet;
|
||
5 years ago
|
|
||
5 years ago
|
/**
|
||
|
* Record handler
|
||
|
*
|
||
|
* @author Dan Zheng
|
||
|
*/
|
||
|
public class BofRecordHandler extends AbstractXlsRecordHandler {
|
||
5 years ago
|
private List<BoundSheetRecord> boundSheetRecords = new ArrayList<BoundSheetRecord>();
|
||
5 years ago
|
private BoundSheetRecord[] orderedBsrs;
|
||
5 years ago
|
private int sheetIndex;
|
||
5 years ago
|
private List<ReadSheet> sheets;
|
||
5 years ago
|
private AnalysisContext context;
|
||
|
private boolean analyAllSheet;
|
||
|
private EventWorkbookBuilder.SheetRecordCollectingListener workbookBuildingListener;
|
||
5 years ago
|
|
||
5 years ago
|
public BofRecordHandler(EventWorkbookBuilder.SheetRecordCollectingListener workbookBuildingListener,
|
||
5 years ago
|
AnalysisContext context, List<ReadSheet> sheets) {
|
||
5 years ago
|
this.context = context;
|
||
|
this.workbookBuildingListener = workbookBuildingListener;
|
||
|
this.sheets = sheets;
|
||
|
}
|
||
5 years ago
|
|
||
5 years ago
|
@Override
|
||
|
public boolean support(Record record) {
|
||
|
return BoundSheetRecord.sid == record.getSid() || BOFRecord.sid == record.getSid();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void processRecord(Record record) {
|
||
|
if (record.getSid() == BoundSheetRecord.sid) {
|
||
|
boundSheetRecords.add((BoundSheetRecord)record);
|
||
|
} else if (record.getSid() == BOFRecord.sid) {
|
||
|
BOFRecord br = (BOFRecord)record;
|
||
|
if (br.getType() == BOFRecord.TYPE_WORKSHEET) {
|
||
5 years ago
|
if (orderedBsrs == null) {
|
||
|
orderedBsrs = BoundSheetRecord.orderByBofPosition(boundSheetRecords);
|
||
5 years ago
|
}
|
||
|
sheetIndex++;
|
||
5 years ago
|
ReadSheet readSheet = new ReadSheet(sheetIndex, orderedBsrs[sheetIndex - 1].getSheetname());
|
||
5 years ago
|
sheets.add(readSheet);
|
||
5 years ago
|
if (this.analyAllSheet) {
|
||
5 years ago
|
context.currentSheet(null, readSheet);
|
||
5 years ago
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void init() {
|
||
5 years ago
|
if (context.readSheetHolder() == null) {
|
||
5 years ago
|
this.analyAllSheet = true;
|
||
|
}
|
||
|
sheetIndex = 0;
|
||
5 years ago
|
orderedBsrs = null;
|
||
5 years ago
|
boundSheetRecords.clear();
|
||
|
sheets.clear();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public int getOrder() {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|