[Libreoffice-commits] core.git: sc/qa sc/source
Bartosz Kosiorek
gang65 at poczta.onet.pl
Tue Jul 12 09:21:33 UTC 2016
sc/qa/unit/data/ods/outline.ods |binary
sc/qa/unit/subsequent_export-test.cxx | 107 ++++++++++++++++++++++++++++------
sc/source/filter/excel/xetable.cxx | 10 ++-
3 files changed, 97 insertions(+), 20 deletions(-)
New commits:
commit b0d96a82a4f6a0832d03d185f4a53db669adcc99
Author: Bartosz Kosiorek <gang65 at poczta.onet.pl>
Date: Fri Jul 8 10:08:00 2016 +0200
tdf#51524 Preserve hidden column width after saving into .xlsx and .xls
Change-Id: I7f69a1e8f8ef46d8b0ab889df30498ec54917230
Reviewed-on: https://gerrit.libreoffice.org/27035
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Eike Rathke <erack at redhat.com>
Tested-by: Eike Rathke <erack at redhat.com>
diff --git a/sc/qa/unit/data/ods/outline.ods b/sc/qa/unit/data/ods/outline.ods
index 320e318..ac951b7 100644
Binary files a/sc/qa/unit/data/ods/outline.ods and b/sc/qa/unit/data/ods/outline.ods differ
diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx
index 560db4d..3fca217 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -481,7 +481,8 @@ void ScExportTest::testFormatExportODS()
void ScExportTest::testOutlineExportXLSX()
{
- //tdf#100347 FILESAVE FILEOPEN after exporting to xlsx format grouping are lost
+ //tdf#100347 FILESAVE FILEOPEN after exporting to .xlsx format grouping are lost
+ //tdf#51524 FILESAVE .xlsx and.xls looses width information for hidden/collapsed grouped columns
ScDocShellRef xShell = loadDoc("outline.", FORMAT_ODS);
CPPUNIT_ASSERT(xShell.Is());
@@ -489,71 +490,143 @@ void ScExportTest::testOutlineExportXLSX()
xmlDocPtr pSheet = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/worksheets/sheet1.xml");
CPPUNIT_ASSERT(pSheet);
+ // First XML node, creates two columns (from min=1 to max=2)
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[1]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[1]", "outlineLevel", "1");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[1]", "collapsed", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[2]", "hidden", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[1]", "min", "1");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[1]", "max", "2");
+
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[2]", "hidden", "true");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[2]", "outlineLevel", "2");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[2]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[2]", "min", "3");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[2]", "max", "3");
+
+ // Column 4 has custom width and it is hidden. We need to make sure that it is created
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[3]", "hidden", "true");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[3]", "outlineLevel", "3");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[3]", "outlineLevel", "2");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[3]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[3]", "min", "4");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[3]", "max", "4");
+
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[4]", "hidden", "true");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[4]", "outlineLevel", "4");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[4]", "outlineLevel", "3");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[4]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[4]", "min", "5");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[4]", "max", "6");
+
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[5]", "hidden", "true");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[5]", "outlineLevel", "3");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[5]", "outlineLevel", "4");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[5]", "collapsed", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "hidden", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "outlineLevel", "2");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "collapsed", "true");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[7]", "hidden", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[7]", "outlineLevel", "2");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[5]", "min", "7");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[5]", "max", "7");
+
+ // Column 8 has custom width and it is hidden. We need to make sure that it is created
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "hidden", "true");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "outlineLevel", "4");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "min", "8");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[6]", "max", "8");
+
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[7]", "hidden", "true");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[7]", "outlineLevel", "4");
assertXPath(pSheet, "/x:worksheet/x:cols/x:col[7]", "collapsed", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "hidden", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "outlineLevel", "1");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "collapsed", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "hidden", "false");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "outlineLevel", "0");
- assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[7]", "min", "9");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[7]", "max", "19");
+
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "hidden", "true");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "outlineLevel", "3");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "collapsed", "true");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "min", "20");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[8]", "max", "20");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "hidden", "true");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "outlineLevel", "3");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "min", "21");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[9]", "max", "21");
+
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[10]", "hidden", "true");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[10]", "outlineLevel", "2");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[10]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[10]", "min", "22");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[10]", "max", "23");
+
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[11]", "hidden", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[11]", "outlineLevel", "1");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[11]", "collapsed", "true");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[11]", "min", "24");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[11]", "max", "24");
+
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[12]", "hidden", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[12]", "outlineLevel", "1");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[12]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[12]", "min", "25");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[12]", "max", "26");
+
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[13]", "hidden", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[13]", "outlineLevel", "0");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[13]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col[13]", "min", "27");
+
+ // We expected that exactly 13 unique Nodes will be produced
+ assertXPath(pSheet, "/x:worksheet/x:cols/x:col", 13);
+
+ // We need to save all 30 rows, as it provides information about outLineLevel
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "r", "1");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "outlineLevel", "0");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[1]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "r", "2");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "outlineLevel", "1");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[2]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "r", "3");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "outlineLevel", "2");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[3]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "r", "4");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "outlineLevel", "2");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[4]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "r", "5");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "outlineLevel", "3");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[5]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "r", "6");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "outlineLevel", "3");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[6]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "r", "7");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "hidden", "true");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "outlineLevel", "4");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[7]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "r", "8");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "hidden", "true");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "outlineLevel", "4");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[8]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "r", "9");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "hidden", "true");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "outlineLevel", "4");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[9]", "collapsed", "false");
- //next rows are the same as the previous one
+ // Next rows are the same as the previous one but it needs to bre preserved,
+ // as they contain information about outlineLevel
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "r", "21");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "hidden", "true");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "outlineLevel", "4");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[21]", "collapsed", "false");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "r", "22");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "outlineLevel", "3");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[22]", "collapsed", "true");
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "r", "23");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "hidden", "false");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "outlineLevel", "3");
assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row[23]", "collapsed", "false");
+
+ // We expected that exactly 30 Row Nodes will be produced
+ assertXPath(pSheet, "/x:worksheet/x:sheetData/x:row", 30);
}
diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx
index 105b168..29f636e 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -1589,8 +1589,8 @@ XclExpColinfo::XclExpColinfo( const XclExpRoot& rRoot,
maXFId.mnXFId = GetXFBuffer().Insert(
rDoc.GetMostUsedPattern( nScCol, 0, nLastScRow, nScTab ), GetDefApiScript() );
- // column width
- sal_uInt16 nScWidth = rDoc.GetColWidth( nScCol, nScTab );
+ // column width. If column is hidden then we should return real value (not zero)
+ sal_uInt16 nScWidth = rDoc.GetColWidth( nScCol, nScTab, false );
mnWidth = XclTools::GetXclColumnWidth( nScWidth, GetCharWidth() );
mnScWidth = sc::TwipsToHMM( nScWidth );
// column flags
@@ -1610,7 +1610,10 @@ void XclExpColinfo::ConvertXFIndexes()
bool XclExpColinfo::IsDefault( const XclExpDefcolwidth& rDefColWidth ) const
{
- return (maXFId.mnXFIndex == EXC_XF_DEFAULTCELL) && (mnFlags == 0) && rDefColWidth.IsDefWidth( mnWidth );
+ return (maXFId.mnXFIndex == EXC_XF_DEFAULTCELL) &&
+ (mnFlags == 0) &&
+ (mnOutlineLevel == 0) &&
+ rDefColWidth.IsDefWidth( mnWidth );
}
bool XclExpColinfo::TryMerge( const XclExpColinfo& rColInfo )
@@ -1618,6 +1621,7 @@ bool XclExpColinfo::TryMerge( const XclExpColinfo& rColInfo )
if( (maXFId.mnXFIndex == rColInfo.maXFId.mnXFIndex) &&
(mnWidth == rColInfo.mnWidth) &&
(mnFlags == rColInfo.mnFlags) &&
+ (mnOutlineLevel == rColInfo.mnOutlineLevel) &&
(mnLastXclCol + 1 == rColInfo.mnFirstXclCol) )
{
mnLastXclCol = rColInfo.mnLastXclCol;
More information about the Libreoffice-commits
mailing list