forked from fanruan/easyexcel
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.
74 lines
3.1 KiB
74 lines
3.1 KiB
package com.alibaba.excel.analysis.v03.handlers; |
|
|
|
import java.util.ArrayList; |
|
import java.util.List; |
|
|
|
import org.apache.poi.hssf.record.BOFRecord; |
|
import org.apache.poi.hssf.record.BoundSheetRecord; |
|
import org.apache.poi.hssf.record.Record; |
|
|
|
import com.alibaba.excel.context.xls.XlsReadContext; |
|
import com.alibaba.excel.exception.ExcelAnalysisStopException; |
|
import com.alibaba.excel.read.metadata.ReadSheet; |
|
import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder; |
|
import com.alibaba.excel.util.SheetUtils; |
|
|
|
/** |
|
* Record handler |
|
* |
|
* @author Dan Zheng |
|
*/ |
|
public class BofRecordHandler extends AbstractXlsRecordHandler { |
|
|
|
@Override |
|
public void processRecord(XlsReadContext xlsReadContext, Record record) { |
|
BOFRecord br = (BOFRecord) record; |
|
XlsReadWorkbookHolder xlsReadWorkbookHolder = xlsReadContext.xlsReadWorkbookHolder(); |
|
if (br.getType() == BOFRecord.TYPE_WORKBOOK) { |
|
xlsReadWorkbookHolder.setReadSheetIndex(null); |
|
return; |
|
} |
|
if (br.getType() != BOFRecord.TYPE_WORKSHEET) { |
|
return; |
|
} |
|
// Init read sheet Data |
|
initReadSheetDataList(xlsReadWorkbookHolder); |
|
Integer readSheetIndex = xlsReadWorkbookHolder.getReadSheetIndex(); |
|
if (readSheetIndex == null) { |
|
readSheetIndex = 0; |
|
xlsReadWorkbookHolder.setReadSheetIndex(readSheetIndex); |
|
} |
|
ReadSheet actualReadSheet = xlsReadWorkbookHolder.getActualSheetDataList().get(readSheetIndex); |
|
assert actualReadSheet != null : "Can't find the sheet."; |
|
// Copy the parameter to the current sheet |
|
ReadSheet readSheet = SheetUtils.match(actualReadSheet, xlsReadContext); |
|
if (readSheet != null) { |
|
xlsReadContext.currentSheet(readSheet); |
|
xlsReadContext.xlsReadSheetHolder().setIgnoreRecord(Boolean.FALSE); |
|
} else { |
|
xlsReadContext.currentSheet(actualReadSheet); |
|
xlsReadContext.xlsReadSheetHolder().setIgnoreRecord(Boolean.TRUE); |
|
} |
|
// Go read the next one |
|
xlsReadWorkbookHolder.setReadSheetIndex(xlsReadWorkbookHolder.getReadSheetIndex() + 1); |
|
} |
|
|
|
private void initReadSheetDataList(XlsReadWorkbookHolder xlsReadWorkbookHolder) { |
|
if (xlsReadWorkbookHolder.getActualSheetDataList() != null) { |
|
return; |
|
} |
|
BoundSheetRecord[] boundSheetRecords = |
|
BoundSheetRecord.orderByBofPosition(xlsReadWorkbookHolder.getBoundSheetRecordList()); |
|
List<ReadSheet> readSheetDataList = new ArrayList<ReadSheet>(); |
|
for (int i = 0; i < boundSheetRecords.length; i++) { |
|
BoundSheetRecord boundSheetRecord = boundSheetRecords[i]; |
|
ReadSheet readSheet = new ReadSheet(i, boundSheetRecord.getSheetname()); |
|
readSheetDataList.add(readSheet); |
|
} |
|
xlsReadWorkbookHolder.setActualSheetDataList(readSheetDataList); |
|
// Just need to get the list of sheets |
|
if (!xlsReadWorkbookHolder.getNeedReadSheet()) { |
|
throw new ExcelAnalysisStopException("Just need to get the list of sheets."); |
|
} |
|
} |
|
}
|
|
|