Browse Source

Fix issue 4: Fix background color of solid pattern

For a solid fill, Excel reverses the role of foreground and
background colours
master
Debao Zhang 12 years ago
parent
commit
9845d8f2ee
  1. 4
      examples/xlsx/style/main.cpp
  2. 5
      src/xlsx/xlsxstyles.cpp
  3. 14
      tests/auto/styles/tst_stylestest.cpp

4
examples/xlsx/style/main.cpp

@ -46,6 +46,10 @@ int main()
format5->setNumberFormat(22);
xlsx.write("A5", QDate(2013, 8, 29), format5);
QXlsx::Format *format6 = xlsx.createFormat();
format6->setPatternBackgroundColor(QColor(Qt::gray));
xlsx.write("A6", "Background color: green", format6);
xlsx.saveAs(DATA_PATH"TestStyle.xlsx");
return 0;
}

5
src/xlsx/xlsxstyles.cpp

@ -311,12 +311,13 @@ void Styles::writeFill(XmlStreamWriter &writer, FillData *fill)
writer.writeStartElement(QStringLiteral("fill"));
writer.writeStartElement(QStringLiteral("patternFill"));
writer.writeAttribute(QStringLiteral("patternType"), patternStrings[fill->pattern]);
// For a solid fill, Excel reverses the role of foreground and background colours
if (fill->fgColor.isValid()) {
writer.writeEmptyElement(QStringLiteral("fgColor"));
writer.writeEmptyElement(fill->pattern == Format::PatternSolid ? QStringLiteral("bgColor") : QStringLiteral("fgColor"));
writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+fill->fgColor.name().mid(1));
}
if (fill->bgColor.isValid()) {
writer.writeEmptyElement(QStringLiteral("bgColor"));
writer.writeEmptyElement(fill->pattern == Format::PatternSolid ? QStringLiteral("fgColor") : QStringLiteral("bgColor"));
writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+fill->bgColor.name().mid(1));
}

14
tests/auto/styles/tst_stylestest.cpp

@ -13,6 +13,7 @@ public:
private Q_SLOTS:
void testEmptyStyle();
void testAddFormat();
void testSolidFillBackgroundColor();
};
StylesTest::StylesTest()
@ -41,6 +42,19 @@ void StylesTest::testAddFormat()
QVERIFY2(xmlData.contains("<cellXfs count=\"2\">"), ""); //Note we have a default one
}
// For a solid fill, Excel reverses the role of foreground and background colours
void StylesTest::testSolidFillBackgroundColor()
{
QXlsx::Styles styles;
QXlsx::Format *format = styles.createFormat();
format->setPatternBackgroundColor(QColor(Qt::red));
styles.addFormat(format);
QByteArray xmlData = styles.saveToXmlData();
QVERIFY(xmlData.contains("<patternFill patternType=\"solid\"><fgColor rgb=\"FFff0000\"/>"));
}
QTEST_APPLESS_MAIN(StylesTest)
#include "tst_stylestest.moc"

Loading…
Cancel
Save