sc/qa/unit/data/xlsx/tdf123139_applyAlignment.xlsx |binary sc/qa/unit/subsequent_export_test2.cxx | 61 +++++++++++++++++++++ sc/source/filter/oox/stylesbuffer.cxx | 4 - 3 files changed, 63 insertions(+), 2 deletions(-)
New commits: commit ab99d16e21e56596803b7d9a28af0895b435ef3e Author: Justin Luth <justin_l...@sil.org> AuthorDate: Tue Nov 30 15:15:24 2021 +0200 Commit: Justin Luth <jl...@mail.com> CommitDate: Wed Dec 8 18:32:28 2021 +0100 tdf#123139 sc oox: CellXf should default to applyAlignment Since the same logic applied to applyProtection I tested and changed that one too. No documentation was found to support the comment (which was probably taken from binary import) that applyAlignment had a context-dependent default value. Testing on the other hand suggests that applyAlignment is always considered true in the case of CellXf and only matters for CellStyleXf. The unit test tests for this - confirmed on Excel 2003/2016. No existing unit tests where found with an assert(rXf1.maModel.mbAlignUsed || (rXf1.maAlignment.getApiData() == rXf2.maAlignment.getApiData())); Change-Id: I47d8dded93335092c93e75b4c18b798569da77f2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126177 Tested-by: Jenkins Reviewed-by: Justin Luth <jl...@mail.com> diff --git a/sc/qa/unit/data/xlsx/tdf123139_applyAlignment.xlsx b/sc/qa/unit/data/xlsx/tdf123139_applyAlignment.xlsx new file mode 100644 index 000000000000..e8ffc4861f45 Binary files /dev/null and b/sc/qa/unit/data/xlsx/tdf123139_applyAlignment.xlsx differ diff --git a/sc/qa/unit/subsequent_export_test2.cxx b/sc/qa/unit/subsequent_export_test2.cxx index a74fff7e04af..1dc763f96631 100644 --- a/sc/qa/unit/subsequent_export_test2.cxx +++ b/sc/qa/unit/subsequent_export_test2.cxx @@ -63,6 +63,7 @@ #include <editeng/udlnitem.hxx> #include <editeng/flditem.hxx> #include <editeng/colritem.hxx> +#include <editeng/justifyitem.hxx> #include <formula/grammar.hxx> #include <unotools/useroptions.hxx> #include <comphelper/propertyvalue.hxx> @@ -185,6 +186,7 @@ public: void testTdf121718_UseFirstPageNumberXLSX(); void testHeaderFontStyleXLSX(); void testTdf135828_Shape_Rect(); + void testTdf123139XLSX(); void testTdf123353(); void testTdf140098(); void testTdf133688_precedents(); @@ -298,6 +300,7 @@ public: CPPUNIT_TEST(testTdf121718_UseFirstPageNumberXLSX); CPPUNIT_TEST(testHeaderFontStyleXLSX); CPPUNIT_TEST(testTdf135828_Shape_Rect); + CPPUNIT_TEST(testTdf123139XLSX); CPPUNIT_TEST(testTdf123353); CPPUNIT_TEST(testTdf140098); CPPUNIT_TEST(testTdf133688_precedents); @@ -2169,6 +2172,64 @@ void ScExportTest2::testTdf135828_Shape_Rect() CPPUNIT_ASSERT_DOUBLES_EQUAL(1988280, nHeight, 10000); } +void ScExportTest2::testTdf123139XLSX() +{ + ScDocShellRef xDocSh = loadDoc(u"tdf123139_applyAlignment.", FORMAT_XLSX); + CPPUNIT_ASSERT_MESSAGE("Failed to open doc", xDocSh.is()); + + ScDocument& rDoc = xDocSh->GetDocument(); + const ScPatternAttr* pAttr = rDoc.GetPattern(0, 0, 0); //A1 + + { + const SvxHorJustifyItem& rJustify = pAttr->GetItem(ATTR_HOR_JUSTIFY); + CPPUNIT_ASSERT_EQUAL(SvxCellHorJustify::Repeat, rJustify.GetValue()); + } + + pAttr = rDoc.GetPattern(0, 1, 0); //A2 + + { + const SfxPoolItem& rItem = pAttr->GetItem(ATTR_HOR_JUSTIFY); + const SvxHorJustifyItem& rJustify = static_cast<const SvxHorJustifyItem&>(rItem); + CPPUNIT_ASSERT_EQUAL(SvxCellHorJustify::Center, rJustify.GetValue()); + } + + { + const ScProtectionAttr& rItem = pAttr->GetItem(ATTR_PROTECTION); + CPPUNIT_ASSERT(rItem.GetProtection()); + CPPUNIT_ASSERT(!rItem.GetHideFormula()); + } + + pAttr = rDoc.GetPattern(2, 0, 0); //C1 + + { + const SfxPoolItem& rItem = pAttr->GetItem(ATTR_HOR_JUSTIFY); + const SvxHorJustifyItem& rJustify = static_cast<const SvxHorJustifyItem&>(rItem); + CPPUNIT_ASSERT_EQUAL(SvxCellHorJustify::Standard, rJustify.GetValue()); + } + + { + const ScProtectionAttr& rItem = pAttr->GetItem(ATTR_PROTECTION); + CPPUNIT_ASSERT(rItem.GetProtection()); + CPPUNIT_ASSERT(rItem.GetHideFormula()); + } + + pAttr = rDoc.GetPattern(2, 1, 0); //C2 + + { + const SfxPoolItem& rItem = pAttr->GetItem(ATTR_HOR_JUSTIFY); + const SvxHorJustifyItem& rJustify = static_cast<const SvxHorJustifyItem&>(rItem); + CPPUNIT_ASSERT_EQUAL(SvxCellHorJustify::Block, rJustify.GetValue()); + } + + { + const ScProtectionAttr& rItem = pAttr->GetItem(ATTR_PROTECTION); + CPPUNIT_ASSERT(!rItem.GetProtection()); + CPPUNIT_ASSERT(!rItem.GetHideFormula()); + } + + xDocSh->DoClose(); +} + void ScExportTest2::testTdf123353() { ScDocShellRef xShell = loadDoc(u"tdf123353.", FORMAT_XLSX); diff --git a/sc/source/filter/oox/stylesbuffer.cxx b/sc/source/filter/oox/stylesbuffer.cxx index d40fcdc3d395..ad17e1db9f4e 100644 --- a/sc/source/filter/oox/stylesbuffer.cxx +++ b/sc/source/filter/oox/stylesbuffer.cxx @@ -1976,10 +1976,10 @@ void Xf::importXf( const AttributeList& rAttribs, bool bCellXf ) maModel.mnFillId = rAttribs.getInteger( XML_fillId, -1 ); + maModel.mbAlignUsed = maModel.mbCellXf || rAttribs.getBool(XML_applyAlignment, true); + maModel.mbProtUsed = maModel.mbCellXf || rAttribs.getBool(XML_applyProtection, true); /* Default value of the apply*** attributes is dependent on context: true in cellStyleXfs element, false in cellXfs element... */ - maModel.mbAlignUsed = rAttribs.getBool( XML_applyAlignment, !maModel.mbCellXf ); - maModel.mbProtUsed = rAttribs.getBool( XML_applyProtection, !maModel.mbCellXf ); maModel.mbFontUsed = rAttribs.getBool( XML_applyFont, !maModel.mbCellXf ); maModel.mbNumFmtUsed = rAttribs.getBool( XML_applyNumberFormat, !maModel.mbCellXf ); maModel.mbBorderUsed = rAttribs.getBool( XML_applyBorder, !maModel.mbCellXf );