use of org.apache.poi.hssf.record.MulRKRecord in project poi by apache.
the class MissingRecordAwareHSSFListener method processRecord.
public void processRecord(Record record) {
int thisRow;
int thisColumn;
CellValueRecordInterface[] expandedRecords = null;
if (record instanceof CellValueRecordInterface) {
CellValueRecordInterface valueRec = (CellValueRecordInterface) record;
thisRow = valueRec.getRow();
thisColumn = valueRec.getColumn();
} else {
if (record instanceof StringRecord) {
//it contains only cashed result of the previous FormulaRecord evaluation
childListener.processRecord(record);
return;
}
thisRow = -1;
thisColumn = -1;
switch(record.getSid()) {
// the workbook
case BOFRecord.sid:
BOFRecord bof = (BOFRecord) record;
if (bof.getType() == BOFRecord.TYPE_WORKBOOK || bof.getType() == BOFRecord.TYPE_WORKSHEET) {
// Reset the row and column counts - new workbook / worksheet
resetCounts();
}
break;
case RowRecord.sid:
RowRecord rowrec = (RowRecord) record;
// If there's a jump in rows, fire off missing row records
if (lastRowRow + 1 < rowrec.getRowNumber()) {
for (int i = (lastRowRow + 1); i < rowrec.getRowNumber(); i++) {
MissingRowDummyRecord dr = new MissingRowDummyRecord(i);
childListener.processRecord(dr);
}
}
// Record this as the last row we saw
lastRowRow = rowrec.getRowNumber();
lastCellColumn = -1;
break;
case SharedFormulaRecord.sid:
// SharedFormulaRecord occurs after the first FormulaRecord of the cell range.
// There are probably (but not always) more cell records after this
// - so don't fire off the LastCellOfRowDummyRecord yet
childListener.processRecord(record);
return;
case MulBlankRecord.sid:
// These appear in the middle of the cell records, to
// specify that the next bunch are empty but styled
// Expand this out into multiple blank cells
MulBlankRecord mbr = (MulBlankRecord) record;
expandedRecords = RecordFactory.convertBlankRecords(mbr);
break;
case MulRKRecord.sid:
// This is multiple consecutive number cells in one record
// Exand this out into multiple regular number cells
MulRKRecord mrk = (MulRKRecord) record;
expandedRecords = RecordFactory.convertRKRecords(mrk);
break;
case NoteRecord.sid:
NoteRecord nrec = (NoteRecord) record;
thisRow = nrec.getRow();
thisColumn = nrec.getColumn();
break;
default:
break;
}
}
// First part of expanded record handling
if (expandedRecords != null && expandedRecords.length > 0) {
thisRow = expandedRecords[0].getRow();
thisColumn = expandedRecords[0].getColumn();
}
// dummy end-of-row records
if (thisRow != lastCellRow && thisRow > 0) {
if (lastCellRow == -1)
lastCellRow = 0;
for (int i = lastCellRow; i < thisRow; i++) {
int cols = -1;
if (i == lastCellRow) {
cols = lastCellColumn;
}
childListener.processRecord(new LastCellOfRowDummyRecord(i, cols));
}
}
// final dummy end-of-row record
if (lastCellRow != -1 && lastCellColumn != -1 && thisRow == -1) {
childListener.processRecord(new LastCellOfRowDummyRecord(lastCellRow, lastCellColumn));
lastCellRow = -1;
lastCellColumn = -1;
}
// the column counter
if (thisRow != lastCellRow) {
lastCellColumn = -1;
}
// the dummy cell records
if (lastCellColumn != thisColumn - 1) {
for (int i = lastCellColumn + 1; i < thisColumn; i++) {
childListener.processRecord(new MissingCellDummyRecord(thisRow, i));
}
}
// Next part of expanded record handling
if (expandedRecords != null && expandedRecords.length > 0) {
thisColumn = expandedRecords[expandedRecords.length - 1].getColumn();
}
// Update cell and row counts as needed
if (thisColumn != -1) {
lastCellColumn = thisColumn;
lastCellRow = thisRow;
}
// Pass along the record(s)
if (expandedRecords != null && expandedRecords.length > 0) {
for (CellValueRecordInterface r : expandedRecords) {
childListener.processRecord((Record) r);
}
} else {
childListener.processRecord(record);
}
}
Aggregations