diff --git a/src/xlsx/xlsxstyles.cpp b/src/xlsx/xlsxstyles.cpp index 478d9e7..a44ae87 100755 --- a/src/xlsx/xlsxstyles.cpp +++ b/src/xlsx/xlsxstyles.cpp @@ -77,8 +77,12 @@ Format *Styles::xfFormat(int idx) const /* Assign index to Font/Fill/Border and Format + + When \a force is true, add the format to the format list, even other format has + the same key have been in. + This is useful when reading existing .xlsx files which may contains duplicated formats. */ -void Styles::addFormat(Format *format) +void Styles::addFormat(Format *format, bool force) { if (!format) return; @@ -188,7 +192,7 @@ void Styles::addFormat(Format *format) } } else { if (!format->xfIndexValid()) { - if (!m_xf_formatsHash.contains(format->formatKey())) { + if (!m_xf_formatsHash.contains(format->formatKey()) || force) { format->setXfIndex(m_xf_formatsList.size()); m_xf_formatsList.append(format); m_xf_formatsHash[format->formatKey()] = format; @@ -926,7 +930,7 @@ bool Styles::readCellXfs(XmlStreamReader &reader) } } - addFormat(format); + addFormat(format, true); //Find the endElement of xf while (!(reader.tokenType() == QXmlStreamReader::EndElement && reader.name() == QLatin1String("xf"))) diff --git a/src/xlsx/xlsxstyles_p.h b/src/xlsx/xlsxstyles_p.h index 5a707db..f985894 100755 --- a/src/xlsx/xlsxstyles_p.h +++ b/src/xlsx/xlsxstyles_p.h @@ -52,7 +52,7 @@ public: Styles(bool createEmpty=false); ~Styles(); Format *createFormat(); - void addFormat(Format *format); + void addFormat(Format *format, bool force=false); Format *xfFormat(int idx) const; QByteArray saveToXmlData(); diff --git a/src/xlsx/xlsxworksheet.cpp b/src/xlsx/xlsxworksheet.cpp index 32b5064..8ecdfcc 100755 --- a/src/xlsx/xlsxworksheet.cpp +++ b/src/xlsx/xlsxworksheet.cpp @@ -1475,7 +1475,7 @@ void WorksheetPrivate::readSheetData(XmlStreamReader &reader) int idx = attributes.value(QLatin1String("s")).toInt(); format = workbook->styles()->xfFormat(idx); if (!format) - qDebug()<<"Invalid style index: "<Invalid style index: ").arg(idx)<