diff options
author | Katarina Behrens <Katarina.Behrens@cib.de> | 2016-02-29 11:23:33 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2016-03-17 14:25:54 +0100 |
commit | 3d6fc8720032a7d98eedcd92fb231374b6b03186 (patch) | |
tree | 0f60ee5dd99a2951b46e7af80085dcba3623dc63 /sc | |
parent | e28f66eb4b225e70d68b64f4e661fabc39111cbe (diff) |
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/23033
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit 5340dc6d735af1eca04b685f1be466a9ed979980)
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/data/xls/cellformat.xls | bin | 0 -> 14336 bytes | |||
-rw-r--r-- | sc/qa/unit/subsequent_export-test.cxx | 17 | ||||
-rw-r--r-- | sc/source/filter/excel/xestring.cxx | 11 | ||||
-rw-r--r-- | sc/source/filter/excel/xetable.cxx | 25 | ||||
-rw-r--r-- | sc/source/filter/inc/xestring.hxx | 4 |
5 files changed, 44 insertions, 13 deletions
diff --git a/sc/qa/unit/data/xls/cellformat.xls b/sc/qa/unit/data/xls/cellformat.xls Binary files differnew file mode 100644 index 000000000000..bdb6c304d6ea --- /dev/null +++ b/sc/qa/unit/data/xls/cellformat.xls diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx index eb0865e2e7d6..047d82eed570 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(); @@ -166,6 +167,7 @@ public: CPPUNIT_TEST(testMiscRowHeightExport); CPPUNIT_TEST(testNamedRangeBugfdo62729); CPPUNIT_TEST(testRichTextExportODS); + CPPUNIT_TEST(testRichTextCellFormat); CPPUNIT_TEST(testFormulaRefSheetNameODS); CPPUNIT_TEST(testCellValuesExportODS); CPPUNIT_TEST(testCellNoteExportODS); @@ -996,6 +998,21 @@ void ScExportTest::testRichTextExportODS() xNewDocSh3->DoClose(); } +void ScExportTest::testRichTextCellFormat() +{ + ScDocShellRef xDocSh = loadDoc("cellformat.", XLS); + CPPUNIT_ASSERT(xDocSh.Is()); + + xmlDocPtr pSheet = XPathHelper::parseExport(&(*xDocSh), m_xSFactory, "xl/worksheets/sheet1.xml", 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.", ODS, true); diff --git a/sc/source/filter/excel/xestring.cxx b/sc/source/filter/excel/xestring.cxx index 2e716b09ce8d..f42427a1f7b1 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 21f0aa990ff7..f13b1d4ad6f1 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 0109972305c7..b00dc6cf9700 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 --------------------------------------------------------------- |