Fix the reading of style.xml

Save all the formats <xf>s in order even they are duplicated.
This commit is contained in:
Debao Zhang
2013-11-02 14:29:50 +08:00
parent 8feb738e9f
commit 6279b7e49b
3 changed files with 9 additions and 5 deletions
+7 -3
View File
@@ -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")))
+1 -1
View File
@@ -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();
+1 -1
View File
@@ -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: "<<idx;
qDebug()<<QStringLiteral("<c s=\"%1\">Invalid style index: ").arg(idx)<<idx;
}
if (attributes.hasAttribute(QLatin1String("t"))) {