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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user