diff --git a/src/xlsx/xlsxstyles.cpp b/src/xlsx/xlsxstyles.cpp index 6328e78..bf2c005 100755 --- a/src/xlsx/xlsxstyles.cpp +++ b/src/xlsx/xlsxstyles.cpp @@ -708,42 +708,61 @@ bool Styles::readNumFmts(XmlStreamReader &reader) { Q_ASSERT(reader.name() == QLatin1String("numFmts")); QXmlStreamAttributes attributes = reader.attributes(); - int count = attributes.value(QLatin1String("count")).toString().toInt(); - for (int i=0; i fmt (new XlsxFormatNumberData); - fmt->formatIndex = attributes.value(QLatin1String("numFmtId")).toString().toInt(); - fmt->formatString = attributes.value(QLatin1String("formatCode")).toString(); - if (fmt->formatIndex >= m_nextCustomNumFmtId) - m_nextCustomNumFmtId = fmt->formatIndex + 1; - m_customNumFmtIdMap.insert(fmt->formatIndex, fmt); - m_customNumFmtsHash.insert(fmt->formatString, fmt); - - while (!(reader.name() == QLatin1String("numFmt") && reader.tokenType() == QXmlStreamReader::EndElement)) - reader.readNextStartElement(); + if (reader.tokenType() == QXmlStreamReader::StartElement) { + if (reader.name() == QLatin1String("numFmt")) { + QXmlStreamAttributes attributes = reader.attributes(); + QSharedPointer fmt (new XlsxFormatNumberData); + fmt->formatIndex = attributes.value(QLatin1String("numFmtId")).toString().toInt(); + fmt->formatString = attributes.value(QLatin1String("formatCode")).toString(); + if (fmt->formatIndex >= m_nextCustomNumFmtId) + m_nextCustomNumFmtId = fmt->formatIndex + 1; + m_customNumFmtIdMap.insert(fmt->formatIndex, fmt); + m_customNumFmtsHash.insert(fmt->formatString, fmt); + } + } } + + if (reader.hasError()) + qWarning()<formatString); - } + if (reader.tokenType() == QXmlStreamReader::StartElement) { + if (reader.name() == QLatin1String("xf")) { - if (xfAttrs.hasAttribute(QLatin1String("applyFont"))) { - int fontIndex = xfAttrs.value(QLatin1String("fontId")).toString().toInt(); - if (fontIndex >= m_fontsList.size()) { - qDebug("Error read styles.xml, cellXfs fontId"); - } else { - Format fontFormat = m_fontsList[fontIndex]; - for (int i=FormatPrivate::P_Font_STARTID; i= m_fillsList.size()) { - qDebug("Error read styles.xml, cellXfs fillId"); - } else { - Format fillFormat = m_fillsList[id]; - for (int i=FormatPrivate::P_Fill_STARTID; i= m_bordersList.size()) { - qDebug("Error read styles.xml, cellXfs borderId"); - } else { - Format borderFormat = m_bordersList[id]; - for (int i=FormatPrivate::P_Border_STARTID; iformatString); } - } - } - if (xfAttrs.hasAttribute(QLatin1String("applyAlignment"))) { - reader.readNextStartElement(); - if (reader.name() == QLatin1String("alignment")) { - QXmlStreamAttributes alignAttrs = reader.attributes(); - - if (alignAttrs.hasAttribute(QLatin1String("horizontal"))) { - static QMap alignStringMap; - if (alignStringMap.isEmpty()) { - alignStringMap.insert(QStringLiteral("left"), Format::AlignLeft); - alignStringMap.insert(QStringLiteral("center"), Format::AlignHCenter); - alignStringMap.insert(QStringLiteral("right"), Format::AlignRight); - alignStringMap.insert(QStringLiteral("justify"), Format::AlignHJustify); - alignStringMap.insert(QStringLiteral("centerContinuous"), Format::AlignHMerge); - alignStringMap.insert(QStringLiteral("distributed"), Format::AlignHDistributed); + if (xfAttrs.hasAttribute(QLatin1String("applyFont"))) { + int fontIndex = xfAttrs.value(QLatin1String("fontId")).toString().toInt(); + if (fontIndex >= m_fontsList.size()) { + qDebug("Error read styles.xml, cellXfs fontId"); + } else { + Format fontFormat = m_fontsList[fontIndex]; + for (int i=FormatPrivate::P_Font_STARTID; i alignStringMap; - if (alignStringMap.isEmpty()) { - alignStringMap.insert(QStringLiteral("top"), Format::AlignTop); - alignStringMap.insert(QStringLiteral("center"), Format::AlignVCenter); - alignStringMap.insert(QStringLiteral("justify"), Format::AlignVJustify); - alignStringMap.insert(QStringLiteral("distributed"), Format::AlignVDistributed); + if (xfAttrs.hasAttribute(QLatin1String("applyFill"))) { + int id = xfAttrs.value(QLatin1String("fillId")).toString().toInt(); + if (id >= m_fillsList.size()) { + qDebug("Error read styles.xml, cellXfs fillId"); + } else { + Format fillFormat = m_fillsList[id]; + for (int i=FormatPrivate::P_Fill_STARTID; i= m_bordersList.size()) { + qDebug("Error read styles.xml, cellXfs borderId"); + } else { + Format borderFormat = m_bordersList[id]; + for (int i=FormatPrivate::P_Border_STARTID; i alignStringMap; + if (alignStringMap.isEmpty()) { + alignStringMap.insert(QStringLiteral("left"), Format::AlignLeft); + alignStringMap.insert(QStringLiteral("center"), Format::AlignHCenter); + alignStringMap.insert(QStringLiteral("right"), Format::AlignRight); + alignStringMap.insert(QStringLiteral("justify"), Format::AlignHJustify); + alignStringMap.insert(QStringLiteral("centerContinuous"), Format::AlignHMerge); + alignStringMap.insert(QStringLiteral("distributed"), Format::AlignHDistributed); + } + QString str = alignAttrs.value(QLatin1String("horizontal")).toString(); + if (alignStringMap.contains(str)) + format.setHorizontalAlignment(alignStringMap[str]); + } - if (alignAttrs.hasAttribute(QLatin1String("wrapText"))) - format.setTextWarp(true); + if (alignAttrs.hasAttribute(QLatin1String("vertical"))) { + static QMap alignStringMap; + if (alignStringMap.isEmpty()) { + alignStringMap.insert(QStringLiteral("top"), Format::AlignTop); + alignStringMap.insert(QStringLiteral("center"), Format::AlignVCenter); + alignStringMap.insert(QStringLiteral("justify"), Format::AlignVJustify); + alignStringMap.insert(QStringLiteral("distributed"), Format::AlignVDistributed); + } + QString str = alignAttrs.value(QLatin1String("vertical")).toString(); + if (alignStringMap.contains(str)) + format.setVerticalAlignment(alignStringMap[str]); + } - if (alignAttrs.hasAttribute(QLatin1String("shrinkToFit"))) - format.setShrinkToFit(true); + if (alignAttrs.hasAttribute(QLatin1String("indent"))) { + int indent = alignAttrs.value(QLatin1String("indent")).toString().toInt(); + format.setIndent(indent); + } + + if (alignAttrs.hasAttribute(QLatin1String("textRotation"))) { + int rotation = alignAttrs.value(QLatin1String("textRotation")).toString().toInt(); + format.setRotation(rotation); + } + + if (alignAttrs.hasAttribute(QLatin1String("wrapText"))) + format.setTextWarp(true); + + if (alignAttrs.hasAttribute(QLatin1String("shrinkToFit"))) + format.setShrinkToFit(true); + } + } + + addXfFormat(format, true); } } + } - addXfFormat(format, true); + if (reader.hasError()) + qWarning()<