Fix issue 4: Fix background color of solid pattern

For a solid fill, Excel reverses the role of foreground and
background colours
This commit is contained in:
Debao Zhang
2013-10-14 13:17:53 +08:00
parent 7748184ba1
commit 9845d8f2ee
3 changed files with 21 additions and 2 deletions
+4
View File
@@ -46,6 +46,10 @@ int main()
format5->setNumberFormat(22); format5->setNumberFormat(22);
xlsx.write("A5", QDate(2013, 8, 29), format5); 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"); xlsx.saveAs(DATA_PATH"TestStyle.xlsx");
return 0; return 0;
} }
+3 -2
View File
@@ -311,12 +311,13 @@ void Styles::writeFill(XmlStreamWriter &writer, FillData *fill)
writer.writeStartElement(QStringLiteral("fill")); writer.writeStartElement(QStringLiteral("fill"));
writer.writeStartElement(QStringLiteral("patternFill")); writer.writeStartElement(QStringLiteral("patternFill"));
writer.writeAttribute(QStringLiteral("patternType"), patternStrings[fill->pattern]); writer.writeAttribute(QStringLiteral("patternType"), patternStrings[fill->pattern]);
// For a solid fill, Excel reverses the role of foreground and background colours
if (fill->fgColor.isValid()) { 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)); writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+fill->fgColor.name().mid(1));
} }
if (fill->bgColor.isValid()) { 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)); writer.writeAttribute(QStringLiteral("rgb"), QStringLiteral("FF")+fill->bgColor.name().mid(1));
} }
+14
View File
@@ -13,6 +13,7 @@ public:
private Q_SLOTS: private Q_SLOTS:
void testEmptyStyle(); void testEmptyStyle();
void testAddFormat(); void testAddFormat();
void testSolidFillBackgroundColor();
}; };
StylesTest::StylesTest() StylesTest::StylesTest()
@@ -41,6 +42,19 @@ void StylesTest::testAddFormat()
QVERIFY2(xmlData.contains("<cellXfs count=\"2\">"), ""); //Note we have a default one 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) QTEST_APPLESS_MAIN(StylesTest)
#include "tst_stylestest.moc" #include "tst_stylestest.moc"