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);
}
}
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);
}
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);
}
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());
}
Aggregations