Search in sources :

Example 6 with LastCellOfRowDummyRecord

use of org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord 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)

Example 7 with LastCellOfRowDummyRecord

use of org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord in project poi by apache.

the class TestMissingRecordAwareHSSFListener method testMulBlankHandling.

/**
	 * MulBlank records hold multiple blank cells. Check we
	 *  can handle them correctly.
	 */
public void testMulBlankHandling() {
    readRecords("45672.xls");
    // Check that we don't have any MulBlankRecords, but do
    //  have lots of BlankRecords
    Record[] rr = r;
    int eorCount = 0;
    int mbrCount = 0;
    int brCount = 0;
    for (Record record : rr) {
        if (record instanceof MulBlankRecord) {
            mbrCount++;
        }
        if (record instanceof BlankRecord) {
            brCount++;
        }
        if (record instanceof LastCellOfRowDummyRecord) {
            eorCount++;
        }
    }
    if (mbrCount > 0) {
        throw new AssertionFailedError("Identified bug 45672");
    }
    if (brCount < 20) {
        throw new AssertionFailedError("Identified bug 45672");
    }
    if (eorCount != 2) {
        throw new AssertionFailedError("Identified bug 45672");
    }
    assertEquals(2, eorCount);
}
Also used : MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord) LastCellOfRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord) Record(org.apache.poi.hssf.record.Record) NumberRecord(org.apache.poi.hssf.record.NumberRecord) StringRecord(org.apache.poi.hssf.record.StringRecord) MissingRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord) MissingCellDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord) LastCellOfRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord) LabelSSTRecord(org.apache.poi.hssf.record.LabelSSTRecord) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) RowRecord(org.apache.poi.hssf.record.RowRecord) BOFRecord(org.apache.poi.hssf.record.BOFRecord) SharedFormulaRecord(org.apache.poi.hssf.record.SharedFormulaRecord) DimensionsRecord(org.apache.poi.hssf.record.DimensionsRecord) WindowTwoRecord(org.apache.poi.hssf.record.WindowTwoRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord) FormulaRecord(org.apache.poi.hssf.record.FormulaRecord) AssertionFailedError(junit.framework.AssertionFailedError)

Example 8 with LastCellOfRowDummyRecord

use of org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord in project poi by apache.

the class TestMissingRecordAwareHSSFListener method testNoExtraNewLines.

// Make sure we don't put in any extra new lines
//  that aren't already there
public void testNoExtraNewLines() {
    // Load a different file
    // This file has has something in lines 1-33
    readRecords("MRExtraLines.xls");
    int rowCount = 0;
    for (Record rec : r) {
        if (rec instanceof LastCellOfRowDummyRecord) {
            LastCellOfRowDummyRecord eor = (LastCellOfRowDummyRecord) rec;
            assertEquals(rowCount, eor.getRow());
            rowCount++;
        }
    }
    // Check we got the 33 rows
    assertEquals(33, rowCount);
}
Also used : LastCellOfRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord) Record(org.apache.poi.hssf.record.Record) NumberRecord(org.apache.poi.hssf.record.NumberRecord) StringRecord(org.apache.poi.hssf.record.StringRecord) MissingRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord) MissingCellDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord) LastCellOfRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord) LabelSSTRecord(org.apache.poi.hssf.record.LabelSSTRecord) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) RowRecord(org.apache.poi.hssf.record.RowRecord) BOFRecord(org.apache.poi.hssf.record.BOFRecord) SharedFormulaRecord(org.apache.poi.hssf.record.SharedFormulaRecord) DimensionsRecord(org.apache.poi.hssf.record.DimensionsRecord) WindowTwoRecord(org.apache.poi.hssf.record.WindowTwoRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord) FormulaRecord(org.apache.poi.hssf.record.FormulaRecord)

Example 9 with LastCellOfRowDummyRecord

use of org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord in project poi by apache.

the class TestMissingRecordAwareHSSFListener method testEndOfRowRecords.

public void testEndOfRowRecords() {
    openNormal();
    // Find the cell at 0,0
    int cell00 = -1;
    for (int i = 0; i < r.length; i++) {
        if (r[i] instanceof LabelSSTRecord) {
            LabelSSTRecord lr = (LabelSSTRecord) r[i];
            if (lr.getRow() == 0 && lr.getColumn() == 0) {
                cell00 = i;
            }
        }
    }
    assertTrue(cell00 > -1);
    // We have rows 0, 1, 2, 20 and 21
    // Row 0 has 1 entry
    // Row 1 has 4 entries
    // Row 2 has 6 entries
    // Row 20 has 5 entries
    // Row 21 has 7 entries
    // Row 22 has 12 entries
    // Row 0
    assertFalse(r[cell00 + 0] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 1] instanceof LastCellOfRowDummyRecord);
    // Row 1
    assertFalse(r[cell00 + 2] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 3] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 4] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 5] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 6] instanceof LastCellOfRowDummyRecord);
    // Row 2
    assertFalse(r[cell00 + 7] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 8] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 9] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 10] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 11] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 12] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 13] instanceof LastCellOfRowDummyRecord);
    // Row 3 -> 19
    assertTrue(r[cell00 + 14] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 15] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 16] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 17] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 18] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 19] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 20] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 21] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 22] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 23] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 24] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 25] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 26] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 27] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 28] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 29] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 30] instanceof LastCellOfRowDummyRecord);
    // Row 20
    assertFalse(r[cell00 + 31] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 32] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 33] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 34] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 35] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 36] instanceof LastCellOfRowDummyRecord);
    // Row 21
    assertFalse(r[cell00 + 37] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 38] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 39] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 40] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 41] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 42] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 43] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 44] instanceof LastCellOfRowDummyRecord);
    // Row 22
    assertFalse(r[cell00 + 45] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 46] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 47] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 48] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 49] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 50] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 51] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 52] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 53] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 54] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 55] instanceof LastCellOfRowDummyRecord);
    assertFalse(r[cell00 + 56] instanceof LastCellOfRowDummyRecord);
    assertTrue(r[cell00 + 57] instanceof LastCellOfRowDummyRecord);
    // Check the numbers of the last seen columns
    LastCellOfRowDummyRecord[] lrs = new LastCellOfRowDummyRecord[24];
    int lrscount = 0;
    for (final Record rec : r) {
        if (rec instanceof LastCellOfRowDummyRecord) {
            lrs[lrscount] = (LastCellOfRowDummyRecord) rec;
            lrscount++;
        }
    }
    assertEquals(0, lrs[0].getLastColumnNumber());
    assertEquals(0, lrs[0].getRow());
    assertEquals(3, lrs[1].getLastColumnNumber());
    assertEquals(1, lrs[1].getRow());
    assertEquals(5, lrs[2].getLastColumnNumber());
    assertEquals(2, lrs[2].getRow());
    for (int i = 3; i <= 19; i++) {
        assertEquals(-1, lrs[i].getLastColumnNumber());
        assertEquals(i, lrs[i].getRow());
    }
    assertEquals(4, lrs[20].getLastColumnNumber());
    assertEquals(20, lrs[20].getRow());
    assertEquals(6, lrs[21].getLastColumnNumber());
    assertEquals(21, lrs[21].getRow());
    assertEquals(11, lrs[22].getLastColumnNumber());
    assertEquals(22, lrs[22].getRow());
}
Also used : LastCellOfRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord) Record(org.apache.poi.hssf.record.Record) NumberRecord(org.apache.poi.hssf.record.NumberRecord) StringRecord(org.apache.poi.hssf.record.StringRecord) MissingRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord) MissingCellDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord) LastCellOfRowDummyRecord(org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord) LabelSSTRecord(org.apache.poi.hssf.record.LabelSSTRecord) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) RowRecord(org.apache.poi.hssf.record.RowRecord) BOFRecord(org.apache.poi.hssf.record.BOFRecord) SharedFormulaRecord(org.apache.poi.hssf.record.SharedFormulaRecord) DimensionsRecord(org.apache.poi.hssf.record.DimensionsRecord) WindowTwoRecord(org.apache.poi.hssf.record.WindowTwoRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord) FormulaRecord(org.apache.poi.hssf.record.FormulaRecord) LabelSSTRecord(org.apache.poi.hssf.record.LabelSSTRecord)

Aggregations

LastCellOfRowDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord)9 MissingCellDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord)9 BOFRecord (org.apache.poi.hssf.record.BOFRecord)8 StringRecord (org.apache.poi.hssf.record.StringRecord)8 BlankRecord (org.apache.poi.hssf.record.BlankRecord)7 FormulaRecord (org.apache.poi.hssf.record.FormulaRecord)7 LabelSSTRecord (org.apache.poi.hssf.record.LabelSSTRecord)7 NumberRecord (org.apache.poi.hssf.record.NumberRecord)7 MissingRowDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord)6 MulBlankRecord (org.apache.poi.hssf.record.MulBlankRecord)6 RowRecord (org.apache.poi.hssf.record.RowRecord)6 DimensionsRecord (org.apache.poi.hssf.record.DimensionsRecord)5 Record (org.apache.poi.hssf.record.Record)5 SharedFormulaRecord (org.apache.poi.hssf.record.SharedFormulaRecord)5 WindowTwoRecord (org.apache.poi.hssf.record.WindowTwoRecord)5 NoteRecord (org.apache.poi.hssf.record.NoteRecord)3 AssertionFailedError (junit.framework.AssertionFailedError)2 BoolErrRecord (org.apache.poi.hssf.record.BoolErrRecord)2 LabelRecord (org.apache.poi.hssf.record.LabelRecord)2 RKRecord (org.apache.poi.hssf.record.RKRecord)2