summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-08-14 23:45:17 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-08-15 00:57:56 +0200
commit46aba1db9a8e43da03f4db580b8dc9de7b850b00 (patch)
treed5cbc9acc44d0dc8ba4425b11641bd3723bc3758
parent3ecec2dbcff2870c385b0814203b1883887eddec (diff)
external data: add merge column transformation
Change-Id: I112650bbb0ed279b386389e7df6b372bde080b62 Reviewed-on: https://gerrit.libreoffice.org/41157 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r--sc/qa/unit/datatransformation_test.cxx28
-rw-r--r--sc/source/ui/dataprovider/datatransformation.cxx23
-rw-r--r--sc/source/ui/inc/datatransformation.hxx12
3 files changed, 63 insertions, 0 deletions
diff --git a/sc/qa/unit/datatransformation_test.cxx b/sc/qa/unit/datatransformation_test.cxx
index bcd8c9a88a7a..785b7024a74b 100644
--- a/sc/qa/unit/datatransformation_test.cxx
+++ b/sc/qa/unit/datatransformation_test.cxx
@@ -30,10 +30,12 @@ public:
void testColumnRemove();
void testColumnSplit();
+ void testColumnMerge();
CPPUNIT_TEST_SUITE(ScDataTransformationTest);
CPPUNIT_TEST(testColumnRemove);
CPPUNIT_TEST(testColumnSplit);
+ CPPUNIT_TEST(testColumnMerge);
CPPUNIT_TEST_SUITE_END();
private:
@@ -95,6 +97,32 @@ void ScDataTransformationTest::testColumnSplit()
CPPUNIT_ASSERT_EQUAL(OUString("Test2,Test3"), m_pDoc->GetString(3, 3, 0));
}
+void ScDataTransformationTest::testColumnMerge()
+{
+ m_pDoc->SetString(2, 0, 0, "Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels");
+ m_pDoc->SetString(2, 2, 0, "Paris");
+ m_pDoc->SetString(2, 3, 0, "Peking");
+
+ m_pDoc->SetString(4, 0, 0, "Germany");
+ m_pDoc->SetString(4, 1, 0, "Belgium");
+ m_pDoc->SetString(4, 2, 0, "France");
+ m_pDoc->SetString(4, 3, 0, "China");
+
+ sc::MergeColumnTransformation aTransform(2, 4, ", ");
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Berlin, Germany"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Brussels, Belgium"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Paris, France"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Peking, China"), m_pDoc->GetString(2, 3, 0));
+
+ for (SCROW nRow = 0; nRow <= 3; ++nRow)
+ {
+ CPPUNIT_ASSERT(m_pDoc->GetString(4, nRow, 0).isEmpty());
+ }
+}
+
ScDataTransformationTest::ScDataTransformationTest() :
ScBootstrapFixture( "/sc/qa/unit/data/dataprovider" ),
m_pDoc(nullptr)
diff --git a/sc/source/ui/dataprovider/datatransformation.cxx b/sc/source/ui/dataprovider/datatransformation.cxx
index e5e65dc43344..2c2fe72bbcf4 100644
--- a/sc/source/ui/dataprovider/datatransformation.cxx
+++ b/sc/source/ui/dataprovider/datatransformation.cxx
@@ -68,6 +68,29 @@ void SplitColumnTransformation::Transform(ScDocument& rDoc)
}
}
+MergeColumnTransformation::MergeColumnTransformation(SCCOL nCol1, SCCOL nCol2, const OUString& rMergeString):
+ mnCol1(nCol1),
+ mnCol2(nCol2),
+ maMergeString(rMergeString)
+{
+}
+
+void MergeColumnTransformation::Transform(ScDocument& rDoc)
+{
+ SCROW nEndRow1 = getLastRow(rDoc, mnCol1);
+ SCROW nEndRow2 = getLastRow(rDoc, mnCol2);
+ SCROW nEndRow = std::max(nEndRow1, nEndRow2);
+
+ for (SCROW nRow = 0; nRow <= nEndRow; ++nRow)
+ {
+ OUString aStr1 = rDoc.GetString(mnCol1, nRow, 0);
+ OUString aStr2 = rDoc.GetString(mnCol2, nRow, 0);
+ rDoc.SetString(mnCol1, nRow, 0, aStr1 + maMergeString + aStr2);
+ }
+
+ rDoc.DeleteCol(0, 0, MAXROW, 0, mnCol2, 1);
+}
+
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/datatransformation.hxx b/sc/source/ui/inc/datatransformation.hxx
index 4cb55e72298d..09c677b56aa4 100644
--- a/sc/source/ui/inc/datatransformation.hxx
+++ b/sc/source/ui/inc/datatransformation.hxx
@@ -53,6 +53,18 @@ public:
virtual void Transform(ScDocument& rDoc) override;
};
+class SC_DLLPUBLIC MergeColumnTransformation : public DataTransformation
+{
+ SCCOL mnCol1;
+ SCCOL mnCol2;
+ OUString maMergeString;
+
+public:
+
+ MergeColumnTransformation(SCCOL nCol1, SCCOL nCol2, const OUString& rMergeString);
+ virtual void Transform(ScDocument& rDoc) override;
+};
+
}
#endif