sc/qa/unit/data/xls/cellformat.xls |binary sc/qa/unit/subsequent_export-test.cxx | 17 +++++++++++++++++ sc/source/filter/excel/xestring.cxx | 11 ++++++++++- sc/source/filter/excel/xetable.cxx | 25 ++++++++++++++----------- sc/source/filter/inc/xestring.hxx | 4 +++- 5 files changed, 44 insertions(+), 13 deletions(-)
New commits: commit a2007d436e41db65374ced89039000a732a04dee Author: Katarina Behrens <katarina.behr...@cib.de> Date: Mon Feb 29 11:23:33 2016 +0100 tdf#98083: Always save cell format it was pretty bad idea not to save it for rich-formatted cells (tdf#92296) as there is more to cell format than just a font Due to a bug in xpath helper I'm backporting only part of the test (cherry picked from commit 7945cdf0ea570302a04550540848c03c0cd030ab) Change-Id: I0e5e7d7187c69519bb8f4de2b627e385fccd3d46 Reviewed-on: https://gerrit.libreoffice.org/23032 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Eike Rathke <er...@redhat.com> diff --git a/sc/qa/unit/data/xls/cellformat.xls b/sc/qa/unit/data/xls/cellformat.xls new file mode 100644 index 0000000..bdb6c30 Binary files /dev/null and b/sc/qa/unit/data/xls/cellformat.xls differ diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx index 475570e..388d6ae 100644 --- a/sc/qa/unit/subsequent_export-test.cxx +++ b/sc/qa/unit/subsequent_export-test.cxx @@ -100,6 +100,7 @@ public: void testMiscRowHeightExport(); void testNamedRangeBugfdo62729(); void testRichTextExportODS(); + void testRichTextCellFormat(); void testFormulaRefSheetNameODS(); void testCellValuesExportODS(); @@ -174,6 +175,7 @@ public: CPPUNIT_TEST(testMiscRowHeightExport); CPPUNIT_TEST(testNamedRangeBugfdo62729); CPPUNIT_TEST(testRichTextExportODS); + CPPUNIT_TEST(testRichTextCellFormat); CPPUNIT_TEST(testFormulaRefSheetNameODS); CPPUNIT_TEST(testCellValuesExportODS); CPPUNIT_TEST(testCellNoteExportODS); @@ -1012,6 +1014,21 @@ void ScExportTest::testRichTextExportODS() xNewDocSh3->DoClose(); } +void ScExportTest::testRichTextCellFormat() +{ + ScDocShellRef xDocSh = loadDoc("cellformat.", FORMAT_XLS); + CPPUNIT_ASSERT(xDocSh.Is()); + + xmlDocPtr pSheet = XPathHelper::parseExport(&(*xDocSh), m_xSFactory, "xl/worksheets/sheet1.xml", FORMAT_XLSX); + CPPUNIT_ASSERT(pSheet); + + // make sure the only cell in this doc is assigned some formatting record + OUString aCellFormat = getXPath(pSheet, "/x:worksheet/x:sheetData/x:row/x:c", "s"); + CPPUNIT_ASSERT_MESSAGE("Cell format is missing", !aCellFormat.isEmpty()); + + xDocSh->DoClose(); +} + void ScExportTest::testFormulaRefSheetNameODS() { ScDocShellRef xDocSh = loadDoc("formula-quote-in-sheet-name.", FORMAT_ODS, true); diff --git a/sc/source/filter/excel/xestring.cxx b/sc/source/filter/excel/xestring.cxx index 58d1acef..7e87879 100644 --- a/sc/source/filter/excel/xestring.cxx +++ b/sc/source/filter/excel/xestring.cxx @@ -178,12 +178,21 @@ void XclExpString::LimitFormatCount( sal_uInt16 nMaxCount ) maFormats.erase( maFormats.begin() + nMaxCount, maFormats.end() ); } -sal_uInt16 XclExpString::RemoveLeadingFont() +sal_uInt16 XclExpString::GetLeadingFont() { sal_uInt16 nFontIdx = EXC_FONT_NOTFOUND; if( !maFormats.empty() && (maFormats.front().mnChar == 0) ) { nFontIdx = maFormats.front().mnFontIdx; + } + return nFontIdx; +} + +sal_uInt16 XclExpString::RemoveLeadingFont() +{ + sal_uInt16 nFontIdx = GetLeadingFont(); + if( nFontIdx != EXC_FONT_NOTFOUND ) + { maFormats.erase( maFormats.begin() ); } return nFontIdx; diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index 866c9ab..a13395b 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -724,18 +724,21 @@ void XclExpLabelCell::Init( const XclExpRoot& rRoot, mnSstIndex = 0; const XclFormatRunVec& rFormats = mxText->GetFormats(); - // Create the cell format and remove formatting of the leading run - // if the entire string is equally formatted + // remove formatting of the leading run if the entire string + // is equally formatted + sal_uInt16 nXclFont = EXC_FONT_NOTFOUND; if( rFormats.size() == 1 ) - { - sal_uInt16 nXclFont = mxText->RemoveLeadingFont(); - if( GetXFId() == EXC_XFID_NOTFOUND ) - { - OSL_ENSURE( nXclFont != EXC_FONT_NOTFOUND, "XclExpLabelCell::Init - leading font not found" ); - bool bForceLineBreak = mxText->IsWrapped(); - SetXFId( rRoot.GetXFBuffer().InsertWithFont( pPattern, ApiScriptType::WEAK, nXclFont, bForceLineBreak ) ); - } - } + nXclFont = mxText->RemoveLeadingFont(); + else + nXclFont = mxText->GetLeadingFont(); + + // create cell format + if( GetXFId() == EXC_XFID_NOTFOUND ) + { + OSL_ENSURE( nXclFont != EXC_FONT_NOTFOUND, "XclExpLabelCell::Init - leading font not found" ); + bool bForceLineBreak = mxText->IsWrapped(); + SetXFId( rRoot.GetXFBuffer().InsertWithFont( pPattern, ApiScriptType::WEAK, nXclFont, bForceLineBreak ) ); + } // get auto-wrap attribute from cell format const XclExpXF* pXF = rRoot.GetXFBuffer().GetXFById( GetXFId() ); diff --git a/sc/source/filter/inc/xestring.hxx b/sc/source/filter/inc/xestring.hxx index 0109972..b00dc6c 100644 --- a/sc/source/filter/inc/xestring.hxx +++ b/sc/source/filter/inc/xestring.hxx @@ -108,7 +108,9 @@ public: void AppendTrailingFormat( sal_uInt16 nFontIdx ); /** Removes formatting runs at the end, if the string contains too much. */ void LimitFormatCount( sal_uInt16 nMaxCount ); - /** Removes and returns the font index for the first char from the formatting runs, otherwise EXC_FONT_NOTFOUND. */ + /** Returns the font index of the first char in the formatting run, or EXC_FONT_NOTFOUND. */ + sal_uInt16 GetLeadingFont(); + /** The same as above + additionally remove the given font from the formatting run*/ sal_uInt16 RemoveLeadingFont(); // get data --------------------------------------------------------------- _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits