[Libreoffice-commits] core.git: oox/source sd/qa

Mark Hung marklh9 at gmail.com
Thu Jun 30 14:56:12 UTC 2016


 oox/source/export/shapes.cxx     |    4 ++--
 sd/qa/unit/data/odp/cellspan.odp |binary
 sd/qa/unit/export-tests.cxx      |   19 +++++++++++++++++++
 3 files changed, 21 insertions(+), 2 deletions(-)

New commits:
commit 0381026924947c6164d1eebe7395c91f619965ce
Author: Mark Hung <marklh9 at gmail.com>
Date:   Thu Jun 2 01:45:55 2016 +0800

    tdf#100179 correct cell merging in pptx.
    
    Change-Id: I7a5bc6fb33c64d1ff398986eff5b960fe037df4d
    Reviewed-on: https://gerrit.libreoffice.org/25791
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Mark Hung <marklh9 at gmail.com>

diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index e389fc6..8d63d2c 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -1321,7 +1321,7 @@ void ShapeExport::WriteTable( const Reference< XShape >& rXShape  )
                     // having : horizontal merge
                     mpFS->startElementNS(XML_a, XML_tc, XML_gridSpan,
                                          I32S(xCell->getColumnSpan()), FSEND);
-                    for(sal_Int32 columnIndex = nColumn; columnIndex < xCell->getColumnSpan(); ++columnIndex) {
+                    for(sal_Int32 columnIndex = nColumn; columnIndex < nColumn + xCell->getColumnSpan(); ++columnIndex) {
                         sal_Int32 transposeIndexForMergeCell = (nRow*nColumnCount) + columnIndex;
                         mergedCellMap[transposeIndexForMergeCell] =
                             std::make_pair(transposedIndexofCell, xCell);
@@ -1333,7 +1333,7 @@ void ShapeExport::WriteTable( const Reference< XShape >& rXShape  )
                     mpFS->startElementNS(XML_a, XML_tc, XML_rowSpan,
                                          I32S(xCell->getRowSpan()), FSEND);
 
-                    for(sal_Int32 rowIndex = nRow; rowIndex < xCell->getRowSpan(); ++rowIndex) {
+                    for(sal_Int32 rowIndex = nRow; rowIndex < nRow + xCell->getRowSpan(); ++rowIndex) {
                         sal_Int32 transposeIndexForMergeCell = (rowIndex*nColumnCount) + nColumn;
                         mergedCellMap[transposeIndexForMergeCell] =
                             std::make_pair(transposedIndexofCell, xCell);
diff --git a/sd/qa/unit/data/odp/cellspan.odp b/sd/qa/unit/data/odp/cellspan.odp
new file mode 100755
index 0000000..775e1e4
Binary files /dev/null and b/sd/qa/unit/data/odp/cellspan.odp differ
diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx
index a2c3be2..5d79439 100644
--- a/sd/qa/unit/export-tests.cxx
+++ b/sd/qa/unit/export-tests.cxx
@@ -128,6 +128,7 @@ public:
     void testCellLeftAndRightMargin();
     void testRightToLeftParaghraph();
     void testTextboxWithHyperlink();
+    void testMergedCells();
     void testTableCellBorder();
     void testBulletColor();
     void testTdf62176();
@@ -185,6 +186,7 @@ public:
     CPPUNIT_TEST(testCellLeftAndRightMargin);
     CPPUNIT_TEST(testRightToLeftParaghraph);
     CPPUNIT_TEST(testTextboxWithHyperlink);
+    CPPUNIT_TEST(testMergedCells);
     CPPUNIT_TEST(testTableCellBorder);
     CPPUNIT_TEST(testBulletColor);
     CPPUNIT_TEST(testTdf62176);
@@ -1356,6 +1358,23 @@ void SdExportTest::testCellLeftAndRightMargin()
     xDocShRef->DoClose();
 }
 
+void SdExportTest::testMergedCells()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/odp/cellspan.odp"), ODP);
+    xDocShRef = saveAndReload( xDocShRef, PPTX );
+    const SdrPage *pPage = GetPage( 1, xDocShRef );
+
+    sdr::table::SdrTableObj *pTableObj = dynamic_cast<sdr::table::SdrTableObj*>(pPage->GetObj(0));
+
+    CPPUNIT_ASSERT( pTableObj );
+    uno::Reference< table::XTable > xTable(pTableObj->getTable(), uno::UNO_QUERY_THROW);
+    uno::Reference< text::XTextRange > xText1(xTable->getCellByPosition(3, 0), uno::UNO_QUERY_THROW);
+    CPPUNIT_ASSERT_EQUAL( OUString("0,3"), xText1->getString() );
+
+    uno::Reference< text::XTextRange > xText2(xTable->getCellByPosition(3, 2), uno::UNO_QUERY_THROW);
+    CPPUNIT_ASSERT_EQUAL( OUString("2,3"), xText2->getString() );
+}
+
 void SdExportTest::testTableCellBorder()
 {
     ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/n90190.pptx"), PPTX);


More information about the Libreoffice-commits mailing list