Search in sources :

Example 1 with MulBlankRecord

use of org.apache.poi.hssf.record.MulBlankRecord in project poi by apache.

the class ValueRecordsAggregate method addMultipleBlanks.

public void addMultipleBlanks(MulBlankRecord mbr) {
    for (int j = 0; j < mbr.getNumColumns(); j++) {
        BlankRecord br = new BlankRecord();
        br.setColumn((short) (j + mbr.getFirstColumn()));
        br.setRow(mbr.getRow());
        br.setXFIndex(mbr.getXFAt(j));
        insertCell(br);
    }
}
Also used : MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord)

Example 2 with MulBlankRecord

use of org.apache.poi.hssf.record.MulBlankRecord in project poi by apache.

the class TestSheet method testCloneMulBlank_bug46776.

@Test
public void testCloneMulBlank_bug46776() {
    Record[] recs = { InternalSheet.createBOF(), new DimensionsRecord(), new RowRecord(1), new MulBlankRecord(1, 3, new short[] { 0x0F, 0x0F, 0x0F }), new RowRecord(2), createWindow2Record(), EOFRecord.instance };
    InternalSheet sheet = createSheet(Arrays.asList(recs));
    InternalSheet sheet2;
    try {
        sheet2 = sheet.cloneSheet();
    } catch (RuntimeException e) {
        if (e.getMessage().equals("The class org.apache.poi.hssf.record.MulBlankRecord needs to define a clone method")) {
            throw new AssertionFailedError("Identified bug 46776");
        }
        throw e;
    }
    RecordCollector rc = new RecordCollector();
    sheet2.visitContainedRecords(rc, 0);
    Record[] clonedRecs = rc.getRecords();
    // +2 for INDEX and DBCELL
    assertEquals(recs.length + 2, clonedRecs.length);
}
Also used : MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) RecordCollector(org.apache.poi.hssf.usermodel.RecordInspector.RecordCollector) RowRecord(org.apache.poi.hssf.record.RowRecord) DimensionsRecord(org.apache.poi.hssf.record.DimensionsRecord) StringRecord(org.apache.poi.hssf.record.StringRecord) GutsRecord(org.apache.poi.hssf.record.GutsRecord) MergeCellsRecord(org.apache.poi.hssf.record.MergeCellsRecord) DrawingRecord(org.apache.poi.hssf.record.DrawingRecord) NoteRecord(org.apache.poi.hssf.record.NoteRecord) Record(org.apache.poi.hssf.record.Record) ObjRecord(org.apache.poi.hssf.record.ObjRecord) EOFRecord(org.apache.poi.hssf.record.EOFRecord) RowRecord(org.apache.poi.hssf.record.RowRecord) ColumnInfoRecord(org.apache.poi.hssf.record.ColumnInfoRecord) WindowTwoRecord(org.apache.poi.hssf.record.WindowTwoRecord) EscherDggRecord(org.apache.poi.ddf.EscherDggRecord) TextObjectRecord(org.apache.poi.hssf.record.TextObjectRecord) IndexRecord(org.apache.poi.hssf.record.IndexRecord) BOFRecord(org.apache.poi.hssf.record.BOFRecord) NumberRecord(org.apache.poi.hssf.record.NumberRecord) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) UncalcedRecord(org.apache.poi.hssf.record.UncalcedRecord) DimensionsRecord(org.apache.poi.hssf.record.DimensionsRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord) FormulaRecord(org.apache.poi.hssf.record.FormulaRecord) AssertionFailedError(junit.framework.AssertionFailedError) Test(org.junit.Test)

Example 3 with MulBlankRecord

use of org.apache.poi.hssf.record.MulBlankRecord in project poi by apache.

the class TestValueRecordsAggregate method confirmMulBlank.

private void confirmMulBlank(int expectedTotalBlankCells, int expectedNumberOfMulBlankRecords, int expectedNumberOfSingleBlankRecords) {
    // assumed row ranges set-up by caller:
    final int firstRow = 1;
    final int lastRow = 2;
    final class BlankStats {

        public int countBlankCells;

        public int countMulBlankRecords;

        public int countSingleBlankRecords;
    }
    final BlankStats bs = new BlankStats();
    RecordVisitor rv = new RecordVisitor() {

        @Override
        public void visitRecord(Record r) {
            if (r instanceof MulBlankRecord) {
                MulBlankRecord mbr = (MulBlankRecord) r;
                bs.countMulBlankRecords++;
                bs.countBlankCells += mbr.getNumColumns();
            } else if (r instanceof BlankRecord) {
                bs.countSingleBlankRecords++;
                bs.countBlankCells++;
            }
        }
    };
    for (int rowIx = firstRow; rowIx <= lastRow; rowIx++) {
        if (valueRecord.rowHasCells(rowIx)) {
            valueRecord.visitCellsForRow(rowIx, rv);
        }
    }
    assertEquals(expectedTotalBlankCells, bs.countBlankCells);
    assertEquals(expectedNumberOfMulBlankRecords, bs.countMulBlankRecords);
    assertEquals(expectedNumberOfSingleBlankRecords, bs.countSingleBlankRecords);
}
Also used : MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord) Record(org.apache.poi.hssf.record.Record) MulBlankRecord(org.apache.poi.hssf.record.MulBlankRecord) SharedFormulaRecord(org.apache.poi.hssf.record.SharedFormulaRecord) WindowTwoRecord(org.apache.poi.hssf.record.WindowTwoRecord) BlankRecord(org.apache.poi.hssf.record.BlankRecord) FormulaRecord(org.apache.poi.hssf.record.FormulaRecord) RecordVisitor(org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor)

Example 4 with MulBlankRecord

use of org.apache.poi.hssf.record.MulBlankRecord 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 5 with MulBlankRecord

use of org.apache.poi.hssf.record.MulBlankRecord 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)

Aggregations

MulBlankRecord (org.apache.poi.hssf.record.MulBlankRecord)6 BlankRecord (org.apache.poi.hssf.record.BlankRecord)5 BOFRecord (org.apache.poi.hssf.record.BOFRecord)3 FormulaRecord (org.apache.poi.hssf.record.FormulaRecord)3 Record (org.apache.poi.hssf.record.Record)3 RowRecord (org.apache.poi.hssf.record.RowRecord)3 StringRecord (org.apache.poi.hssf.record.StringRecord)3 WindowTwoRecord (org.apache.poi.hssf.record.WindowTwoRecord)3 AssertionFailedError (junit.framework.AssertionFailedError)2 LastCellOfRowDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord)2 MissingCellDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord)2 MissingRowDummyRecord (org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord)2 DimensionsRecord (org.apache.poi.hssf.record.DimensionsRecord)2 NoteRecord (org.apache.poi.hssf.record.NoteRecord)2 NumberRecord (org.apache.poi.hssf.record.NumberRecord)2 SharedFormulaRecord (org.apache.poi.hssf.record.SharedFormulaRecord)2 Test (org.junit.Test)2 EscherDggRecord (org.apache.poi.ddf.EscherDggRecord)1 CellValueRecordInterface (org.apache.poi.hssf.record.CellValueRecordInterface)1 ColumnInfoRecord (org.apache.poi.hssf.record.ColumnInfoRecord)1