Skip to content

Commit 0c8a176

Browse files
authored
Merge pull request #311 from alexagr/fix-empty-columns
- fix parsing of worksheets that lack column number / have invalid dimension
2 parents a98a964 + cfe9447 commit 0c8a176

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

QXlsx/source/xlsxworksheet.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2261,6 +2261,9 @@ void WorksheetPrivate::loadXmlSheetData(QXmlStreamReader &reader)
22612261

22622262
Q_ASSERT(reader.name() == QLatin1String("sheetData"));
22632263

2264+
int row_num = 0;
2265+
int col_num = 0;
2266+
22642267
while (!reader.atEnd() && !(reader.name() == QLatin1String("sheetData") &&
22652268
reader.tokenType() == QXmlStreamReader::EndElement)) {
22662269
if (reader.readNextStartElement()) {
@@ -2305,13 +2308,24 @@ void WorksheetPrivate::loadXmlSheetData(QXmlStreamReader &reader)
23052308
}
23062309
}
23072310

2311+
if (attributes.hasAttribute(QLatin1String("r")))
2312+
row_num = attributes.value(QLatin1String("r")).toInt();
2313+
else
2314+
++row_num;
2315+
col_num = 0;
2316+
23082317
} else if (reader.name() == QLatin1String("c")) // Cell
23092318
{
23102319

23112320
// Cell
23122321
QXmlStreamAttributes attributes = reader.attributes();
23132322
QString r = attributes.value(QLatin1String("r")).toString();
23142323
CellReference pos(r);
2324+
if (r.isEmpty())
2325+
{
2326+
pos.setRow(row_num);
2327+
pos.setColumn(++col_num);
2328+
}
23152329

23162330
// get format
23172331
Format format;
@@ -2433,6 +2447,12 @@ void WorksheetPrivate::loadXmlSheetData(QXmlStreamReader &reader)
24332447
}
24342448
}
24352449
}
2450+
2451+
if (dimension.lastRow() < row_num)
2452+
dimension.setLastRow(row_num);
2453+
2454+
if (dimension.lastColumn() < col_num)
2455+
dimension.setLastColumn(col_num);
24362456
}
24372457

24382458
void WorksheetPrivate::loadXmlColumnsInfo(QXmlStreamReader &reader)

0 commit comments

Comments
 (0)