Correct logic for the start-of-sheet missing rows, for event user model, and add tests for this

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1614789 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2014-07-30 23:06:46 +00:00
parent bf860eccf1
commit f16296111b
3 changed files with 21 additions and 3 deletions

View File

@ -86,7 +86,8 @@ public final class MissingRecordAwareHSSFListener implements HSSFListener {
// the workbook // the workbook
case BOFRecord.sid: case BOFRecord.sid:
BOFRecord bof = (BOFRecord) record; BOFRecord bof = (BOFRecord) record;
if (bof.getType() == bof.TYPE_WORKBOOK || bof.getType() == bof.TYPE_WORKSHEET) { if (bof.getType() == BOFRecord.TYPE_WORKBOOK ||
bof.getType() == BOFRecord.TYPE_WORKSHEET) {
// Reset the row and column counts - new workbook / worksheet // Reset the row and column counts - new workbook / worksheet
resetCounts(); resetCounts();
} }
@ -106,6 +107,7 @@ public final class MissingRecordAwareHSSFListener implements HSSFListener {
// Record this as the last row we saw // Record this as the last row we saw
lastRowRow = rowrec.getRowNumber(); lastRowRow = rowrec.getRowNumber();
lastCellColumn = -1;
break; break;
case SharedFormulaRecord.sid: case SharedFormulaRecord.sid:
@ -144,7 +146,8 @@ public final class MissingRecordAwareHSSFListener implements HSSFListener {
// If we're on cells, and this cell isn't in the same // If we're on cells, and this cell isn't in the same
// row as the last one, then fire the // row as the last one, then fire the
// dummy end-of-row records // dummy end-of-row records
if(thisRow != lastCellRow && lastCellRow > -1) { if(thisRow != lastCellRow && thisRow > 0) {
if (lastCellRow == -1) lastCellRow = 0;
for(int i=lastCellRow; i<thisRow; i++) { for(int i=lastCellRow; i<thisRow; i++) {
int cols = -1; int cols = -1;
if(i == lastCellRow) { if(i == lastCellRow) {

View File

@ -44,4 +44,8 @@ public final class LastCellOfRowDummyRecord extends DummyRecordBase {
* for the row. * for the row.
*/ */
public int getLastColumnNumber() { return lastColumnNumber; } public int getLastColumnNumber() { return lastColumnNumber; }
public String toString() {
return "End-of-Row for Row=" + row + " at Column=" + lastColumnNumber;
}
} }

View File

@ -567,7 +567,18 @@ public final class TestMissingRecordAwareHSSFListener extends TestCase {
// Now onto the cells // Now onto the cells
// Because the 3 first rows are missing, should have last-of-row records first // Because the 3 first rows are missing, should have last-of-row records first
// TODO Fix! assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass());
assertEquals(0, ((LastCellOfRowDummyRecord)r[pos]).getRow());
assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber());
pos++;
assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass());
assertEquals(1, ((LastCellOfRowDummyRecord)r[pos]).getRow());
assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber());
pos++;
assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass());
assertEquals(2, ((LastCellOfRowDummyRecord)r[pos]).getRow());
assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber());
pos++;
// Onto row 4 (=3) // Onto row 4 (=3)