Search in sources :

Example 1 with MulRKRecord

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);
    }
}
Also used : MissingRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) CellValueRecordInterface(org.apache.poi.hssf.record.CellValueRecordInterface) RowRecord(org.apache.poi.hssf.record.RowRecord) LastCellOfRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord) MulRKRecord(org.apache.poi.hssf.record.MulRKRecord) NoteRecord(org.apache.poi.hssf.record.NoteRecord) BOFRecord(org.apache.poi.hssf.record.BOFRecord) MissingCellDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord) StringRecord(org.apache.poi.hssf.record.StringRecord)

Aggregations

LastCellOfRowDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord)1 MissingCellDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord)1 MissingRowDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord)1 BOFRecord (org.apache.poi.hssf.record.BOFRecord)1 CellValueRecordInterface (org.apache.poi.hssf.record.CellValueRecordInterface)1 MulBlankRecord (org.apache.poi.hssf.record.MulBlankRecord)1 MulRKRecord (org.apache.poi.hssf.record.MulRKRecord)1 NoteRecord (org.apache.poi.hssf.record.NoteRecord)1 RowRecord (org.apache.poi.hssf.record.RowRecord)1 StringRecord (org.apache.poi.hssf.record.StringRecord)1