Browse Source

Fix the reading of style.xml

Save all the formats <xf>s in order even they are duplicated.
master
Debao Zhang 11 years ago
parent
commit
6279b7e49b
  1. 10
      src/xlsx/xlsxstyles.cpp
  2. 2
      src/xlsx/xlsxstyles_p.h
  3. 2
      src/xlsx/xlsxworksheet.cpp

10
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")))

2
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();

2
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: "<<idx;
qDebug()<<QStringLiteral("<c s=\"%1\">Invalid style index: ").arg(idx)<<idx;
}
if (attributes.hasAttribute(QLatin1String("t"))) {

Loading…
Cancel
Save