From eee0a52b82c98d640ad35b06e3524f1574a80af6 Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Thu, 24 Oct 2013 17:32:56 +0800 Subject: [PATCH] Add read support for error cell type --- src/xlsx/xlsxworksheet.cpp | 16 ++++++++++++++++ tests/auto/worksheet/tst_worksheet.cpp | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/src/xlsx/xlsxworksheet.cpp b/src/xlsx/xlsxworksheet.cpp index 5733287..fb3de23 100755 --- a/src/xlsx/xlsxworksheet.cpp +++ b/src/xlsx/xlsxworksheet.cpp @@ -1203,6 +1203,22 @@ void WorksheetPrivate::readSheetData(XmlStreamReader &reader) QSharedPointer data = readNumericCellData(reader); data->d_ptr->format = format; 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 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")) { QSharedPointer data = readNumericCellData(reader); data->d_ptr->format = format; diff --git a/tests/auto/worksheet/tst_worksheet.cpp b/tests/auto/worksheet/tst_worksheet.cpp index 93afb49..f9659c2 100644 --- a/tests/auto/worksheet/tst_worksheet.cpp +++ b/tests/auto/worksheet/tst_worksheet.cpp @@ -120,6 +120,7 @@ void WorksheetTest::testReadSheetData() "" "12345" "inline test string" + "1/0#DIV/0!" "" ""; QXlsx::XmlStreamReader reader(xmlData); @@ -152,6 +153,10 @@ void WorksheetTest::testReadSheetData() //C3 QCOMPARE(sheet.d_ptr->cellTable[2][2]->dataType(), QXlsx::Cell::InlineString); 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()