Kaydet (Commit) 8ef47e60 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

support multiple columns in column data transformations

Change-Id: Ic911fb7d5f99f692c960ef5267e37b263e798672
Reviewed-on: https://gerrit.libreoffice.org/49457Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMarkus Mohrhard <markus.mohrhard@googlemail.com>
üst c7b4546e
......@@ -53,7 +53,7 @@ void ScDataTransformationTest::testColumnRemove()
}
}
sc::ColumnRemoveTransformation aTransformation(5);
sc::ColumnRemoveTransformation aTransformation({5});
aTransformation.Transform(*m_pDoc);
for (SCROW nRow = 0; nRow < 10; ++nRow)
......@@ -109,7 +109,7 @@ void ScDataTransformationTest::testColumnMerge()
m_pDoc->SetString(4, 2, 0, "France");
m_pDoc->SetString(4, 3, 0, "China");
sc::MergeColumnTransformation aTransform(2, 4, ", ");
sc::MergeColumnTransformation aTransform({2, 4}, ", ");
aTransform.Transform(*m_pDoc);
CPPUNIT_ASSERT_EQUAL(OUString("Berlin, Germany"), m_pDoc->GetString(2, 0, 0));
......
......@@ -26,8 +26,8 @@ SCROW DataTransformation::getLastRow(const ScDocument& rDoc, SCCOL nCol)
return nEndRow;
}
ColumnRemoveTransformation::ColumnRemoveTransformation(SCCOL nCol):
mnCol(nCol)
ColumnRemoveTransformation::ColumnRemoveTransformation(const std::set<SCCOL>& rColumns):
maColumns(rColumns)
{
}
......@@ -37,7 +37,10 @@ ColumnRemoveTransformation::~ColumnRemoveTransformation()
void ColumnRemoveTransformation::Transform(ScDocument& rDoc) const
{
rDoc.DeleteCol(0, 0, MAXROW, 0, mnCol, 1);
for (auto& rCol : maColumns)
{
rDoc.DeleteCol(0, 0, MAXROW, 0, rCol, 1);
}
}
SplitColumnTransformation::SplitColumnTransformation(SCCOL nCol, sal_Unicode cSeparator):
......@@ -68,27 +71,46 @@ void SplitColumnTransformation::Transform(ScDocument& rDoc) const
}
}
MergeColumnTransformation::MergeColumnTransformation(SCCOL nCol1, SCCOL nCol2, const OUString& rMergeString):
mnCol1(nCol1),
mnCol2(nCol2),
MergeColumnTransformation::MergeColumnTransformation(const std::set<SCCOL>& rColumns, const OUString& rMergeString):
maColumns(rColumns),
maMergeString(rMergeString)
{
}
void MergeColumnTransformation::Transform(ScDocument& rDoc) const
{
SCROW nEndRow1 = getLastRow(rDoc, mnCol1);
SCROW nEndRow2 = getLastRow(rDoc, mnCol2);
SCROW nEndRow = std::max(nEndRow1, nEndRow2);
if (maColumns.empty())
return;
for (SCROW nRow = 0; nRow <= nEndRow; ++nRow)
SCROW nMaxRow = 0;
for (auto& itr : maColumns)
{
OUString aStr1 = rDoc.GetString(mnCol1, nRow, 0);
OUString aStr2 = rDoc.GetString(mnCol2, nRow, 0);
rDoc.SetString(mnCol1, nRow, 0, aStr1 + maMergeString + aStr2);
nMaxRow = getLastRow(rDoc, itr);
}
rDoc.DeleteCol(0, 0, MAXROW, 0, mnCol2, 1);
SCCOL nTargetCol = *maColumns.begin();
for (SCROW nRow = 0; nRow <= nMaxRow; ++nRow)
{
OUStringBuffer aStr = rDoc.GetString(nTargetCol, nRow, 0);
for (auto& itr : maColumns)
{
if (itr != nTargetCol)
{
aStr.append(maMergeString).append(rDoc.GetString(itr, nRow, 0));
}
}
rDoc.SetString(nTargetCol, nRow, 0, aStr.makeStringAndClear());
}
for (auto& itr : maColumns)
{
if (itr == nTargetCol)
continue;
rDoc.DeleteCol(0, 0, MAXROW, 0, itr, 1);
}
}
SortTransformation::SortTransformation(const ScSortParam& rSortParam):
......
......@@ -15,6 +15,8 @@
#include <sortparam.hxx>
#include <set>
class ScDocument;
namespace sc {
......@@ -34,11 +36,11 @@ public:
class SC_DLLPUBLIC ColumnRemoveTransformation : public DataTransformation
{
SCCOL mnCol;
std::set<SCCOL> maColumns;
public:
ColumnRemoveTransformation(SCCOL nCol);
ColumnRemoveTransformation(const std::set<SCCOL>& rColumns);
virtual ~ColumnRemoveTransformation() override;
virtual void Transform(ScDocument& rDoc) const override;
......@@ -57,13 +59,12 @@ public:
class SC_DLLPUBLIC MergeColumnTransformation : public DataTransformation
{
SCCOL mnCol1;
SCCOL mnCol2;
std::set<SCCOL> maColumns;
OUString maMergeString;
public:
MergeColumnTransformation(SCCOL nCol1, SCCOL nCol2, const OUString& rMergeString);
MergeColumnTransformation(const std::set<SCCOL>& rColumns, const OUString& rMergeString);
virtual void Transform(ScDocument& rDoc) const override;
};
......
......@@ -327,7 +327,8 @@ ScMergeColumnTransformationControl::ScMergeColumnTransformationControl(vcl::Wind
std::shared_ptr<sc::DataTransformation> ScMergeColumnTransformationControl::getTransformation()
{
return std::make_shared<sc::MergeColumnTransformation>(0, 1, ",");
std::set<SCCOL> maColumns = {0, 1};
return std::make_shared<sc::MergeColumnTransformation>(maColumns, ",");
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment