records.add(condFormatting);
continue;
}
if (recSid == ColumnInfoRecord.sid) {
_columnInfos = new ColumnInfoRecordsAggregate(rs);
records.add(_columnInfos);
continue;
}
if ( recSid == DVALRecord.sid) {
_dataValidityTable = new DataValidityTable(rs);
records.add(_dataValidityTable);
continue;
}
if (RecordOrderer.isRowBlockRecord(recSid)) {
//only add the aggregate once
if (rra != null) {
throw new RuntimeException("row/cell records found in the wrong place");
}
RowBlocksReader rbr = new RowBlocksReader(rs);
_mergedCellsTable.addRecords(rbr.getLooseMergedCells());
rra = new RowRecordsAggregate(rbr.getPlainRecordStream(), rbr.getSharedFormulaManager());
records.add(rra); //only add the aggregate once
continue;
}
if (CustomViewSettingsRecordAggregate.isBeginRecord(recSid)) {
// This happens three times in test sample file "29982.xls"
// Also several times in bugzilla samples 46840-23373 and 46840-23374
records.add(new CustomViewSettingsRecordAggregate(rs));
continue;
}
if (PageSettingsBlock.isComponentRecord(recSid)) {
if (_psBlock == null) {
// first PSB record encountered - read all of them:
_psBlock = new PageSettingsBlock(rs);
records.add(_psBlock);
} else {
// one or more PSB records found after some intervening non-PSB records
_psBlock.addLateRecords(rs);
}
continue;
}
if (WorksheetProtectionBlock.isComponentRecord(recSid)) {
_protectionBlock.addRecords(rs);
continue;
}
if (recSid == MergeCellsRecord.sid) {
// when the MergedCellsTable is found in the right place, we expect those records to be contiguous
_mergedCellsTable.read(rs);
continue;
}
if (recSid == BOFRecord.sid) {
ChartSubstreamRecordAggregate chartAgg = new ChartSubstreamRecordAggregate(rs);
if (false) {
// TODO - would like to keep the chart aggregate packed, but one unit test needs attention
records.add(chartAgg);
} else {
spillAggregate(chartAgg, records);
}
continue;
}
Record rec = rs.getNext();
if ( recSid == IndexRecord.sid ) {
// ignore INDEX record because it is only needed by Excel,
// and POI always re-calculates its contents
continue;
}
if (recSid == UncalcedRecord.sid) {
// don't add UncalcedRecord to the list
_isUncalced = true; // this flag is enough
continue;
}
if (recSid == EOFRecord.sid) {
records.add(rec);
break;
}
if (recSid == DimensionsRecord.sid)
{
// Make a columns aggregate if one hasn't ready been created.
if (_columnInfos == null)
{
_columnInfos = new ColumnInfoRecordsAggregate();
records.add(_columnInfos);
}
_dimensions = ( DimensionsRecord ) rec;
dimsloc = records.size();