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); 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;
} }

5
src/xlsx/xlsxstyles.cpp

@ -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
tests/auto/styles/tst_stylestest.cpp

@ -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"

Loading…
Cancel
Save