Add read support for error cell type
This commit is contained in:
@@ -1203,6 +1203,22 @@ void WorksheetPrivate::readSheetData(XmlStreamReader &reader)
|
|||||||
QSharedPointer<Cell> data = readNumericCellData(reader);
|
QSharedPointer<Cell> data = readNumericCellData(reader);
|
||||||
data->d_ptr->format = format;
|
data->d_ptr->format = format;
|
||||||
cellTable[pos.x()][pos.y()] = data;
|
cellTable[pos.x()][pos.y()] = data;
|
||||||
|
} else if (type == QLatin1String("e")) {
|
||||||
|
//error type, such as #DIV/0! #NULL! #REF! etc
|
||||||
|
QString v_str, f_str;
|
||||||
|
while (!(reader.name() == QLatin1String("c") && reader.tokenType() == QXmlStreamReader::EndElement)) {
|
||||||
|
reader.readNextStartElement();
|
||||||
|
if (reader.tokenType() == QXmlStreamReader::StartElement) {
|
||||||
|
if (reader.name() == QLatin1String("v"))
|
||||||
|
v_str = reader.readElementText();
|
||||||
|
else if (reader.name() == QLatin1String("f"))
|
||||||
|
f_str = reader.readElementText();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QSharedPointer<Cell> data(new Cell(v_str, Cell::Error, format));
|
||||||
|
if (!f_str.isEmpty())
|
||||||
|
data->d_ptr->formula = f_str;
|
||||||
|
cellTable[pos.x()][pos.y()] = data;
|
||||||
} else if (type == QLatin1String("n")) {
|
} else if (type == QLatin1String("n")) {
|
||||||
QSharedPointer<Cell> data = readNumericCellData(reader);
|
QSharedPointer<Cell> data = readNumericCellData(reader);
|
||||||
data->d_ptr->format = format;
|
data->d_ptr->format = format;
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ void WorksheetTest::testReadSheetData()
|
|||||||
"<row r=\"3\" spans=\"1:6\">"
|
"<row r=\"3\" spans=\"1:6\">"
|
||||||
"<c r=\"B3\" s=\"1\"><v>12345</v></c>"
|
"<c r=\"B3\" s=\"1\"><v>12345</v></c>"
|
||||||
"<c r=\"C3\" s=\"1\" t=\"inlineStr\"><is><t>inline test string</t></is></c>"
|
"<c r=\"C3\" s=\"1\" t=\"inlineStr\"><is><t>inline test string</t></is></c>"
|
||||||
|
"<c r=\"E3\" t=\"e\"><f>1/0</f><v>#DIV/0!</v></c>"
|
||||||
"</row>"
|
"</row>"
|
||||||
"</sheetData>";
|
"</sheetData>";
|
||||||
QXlsx::XmlStreamReader reader(xmlData);
|
QXlsx::XmlStreamReader reader(xmlData);
|
||||||
@@ -152,6 +153,10 @@ void WorksheetTest::testReadSheetData()
|
|||||||
//C3
|
//C3
|
||||||
QCOMPARE(sheet.d_ptr->cellTable[2][2]->dataType(), QXlsx::Cell::InlineString);
|
QCOMPARE(sheet.d_ptr->cellTable[2][2]->dataType(), QXlsx::Cell::InlineString);
|
||||||
QCOMPARE(sheet.d_ptr->cellTable[2][2]->value().toString(), QStringLiteral("inline test string"));
|
QCOMPARE(sheet.d_ptr->cellTable[2][2]->value().toString(), QStringLiteral("inline test string"));
|
||||||
|
|
||||||
|
//E3
|
||||||
|
QCOMPARE(sheet.d_ptr->cellTable[2][4]->dataType(), QXlsx::Cell::Error);
|
||||||
|
QCOMPARE(sheet.d_ptr->cellTable[2][4]->value().toString(), QStringLiteral("#DIV/0!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorksheetTest::testReadColsInfo()
|
void WorksheetTest::testReadColsInfo()
|
||||||
|
|||||||
Reference in New Issue
Block a user