From 09eccdc87db5258ea779e2bcc12437f802624ee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20Sz=C5=B1cs?= Date: Fri, 13 Nov 2020 09:42:00 +0100 Subject: [PATCH] tdf#137624 sc: autofill mixed sequences in merged cells MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improve FillAnalyse, FillSeries to continue linear sequences of mixed values in merged cells (mixed values are string + number, like 'a1','a2' or '1a'). It discovers the linear sequence only if the string parts are identical. It recognizes user lists only if all elements are in the same user list. Co-authored-by: Tibor Nagy (NISZ) Change-Id: I8810a0f1d637436222e3d0b9219da38ccb7c6346 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105784 Tested-by: László Németh Reviewed-by: László Németh --- sc/qa/unit/copy_paste_test.cxx | 52 ++++++++++++ .../ods/tdf137624_autofillMergedMixed.ods | Bin 0 -> 17389 bytes sc/source/core/data/table4.cxx | 75 +++++++++++++----- 3 files changed, 105 insertions(+), 22 deletions(-) create mode 100644 sc/qa/unit/data/ods/tdf137624_autofillMergedMixed.ods diff --git a/sc/qa/unit/copy_paste_test.cxx b/sc/qa/unit/copy_paste_test.cxx index 62ee0bcc53f0..87d8311bdc9b 100644 --- a/sc/qa/unit/copy_paste_test.cxx +++ b/sc/qa/unit/copy_paste_test.cxx @@ -51,6 +51,7 @@ public: void tdf137653_137654_autofillUserlist(); void tdf113500_autofillMixed(); void tdf137625_autofillMergedUserlist(); + void tdf137624_autofillMergedMixed(); CPPUNIT_TEST_SUITE(ScCopyPasteTest); CPPUNIT_TEST(testCopyPasteXLS); @@ -67,6 +68,7 @@ public: CPPUNIT_TEST(tdf137653_137654_autofillUserlist); CPPUNIT_TEST(tdf113500_autofillMixed); CPPUNIT_TEST(tdf137625_autofillMergedUserlist); + CPPUNIT_TEST(tdf137624_autofillMergedMixed); CPPUNIT_TEST_SUITE_END(); private: @@ -930,7 +932,57 @@ void ScCopyPasteTest::tdf137625_autofillMergedUserlist() } } +void ScCopyPasteTest::tdf137624_autofillMergedMixed() +{ + ScDocShellRef xDocSh = loadDocAndSetupModelViewController("tdf137624_autofillMergedMixed.", FORMAT_ODS, true); + ScDocument& rDoc = xDocSh->GetDocument(); + // Get the document controller + ScTabViewShell* pView = xDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pView != nullptr); + + // add 1aa,2bb,3cc,4dd,5ee,6ff to userlist, to test that autofill won't confuse it with 1aa,3aa + // delete every userlist to make sure there won't be any string that is in 2 different userlist + ScGlobal::GetUserList()->clear(); + addToUserList({ "1aa,2bb,3cc,4dd,5ee,6ff" }); + + // fillauto mixed (string + number), these areas contain only merged cells + pView->FillAuto(FILL_TO_RIGHT, 7, 5, 12, 7, 6); //H6:M8 + pView->FillAuto(FILL_TO_LEFT, 7, 5, 12, 7, 6); //H6:M8 + pView->FillAuto(FILL_TO_BOTTOM, 1, 20, 3, 23, 4); //B21:D24 + pView->FillAuto(FILL_TO_TOP, 1, 20, 3, 23, 4); //B21:D24 + + // compare the results of fill-right / -left with the reference stored in the test file + // this compares the whole area blindly, for specific test cases, check the test file + for (int nCol = 1; nCol <= 18; nCol++) + { + for (int nRow = 5; nRow <= 7; nRow++) + { + CellType nType1 = rDoc.GetCellType(ScAddress(nCol, nRow, 0)); + CellType nType2 = rDoc.GetCellType(ScAddress(nCol, nRow + 4, 0)); + OUString aStr1 = rDoc.GetString(nCol, nRow, 0); + OUString aStr2 = rDoc.GetString(nCol, nRow + 4, 0); + + CPPUNIT_ASSERT_EQUAL(nType1, nType2); + CPPUNIT_ASSERT_EQUAL(aStr1, aStr2); + } + } + + // compare the results of fill-up / -down + for (int nCol = 1; nCol <= 3; nCol++) + { + for (int nRow = 16; nRow <= 27; nRow++) + { + CellType nType1 = rDoc.GetCellType(ScAddress(nCol, nRow, 0)); + CellType nType2 = rDoc.GetCellType(ScAddress(nCol + 4, nRow, 0)); + OUString aStr1 = rDoc.GetString(nCol, nRow, 0); + OUString aStr2 = rDoc.GetString(nCol + 4, nRow, 0); + + CPPUNIT_ASSERT_EQUAL(nType1, nType2); + CPPUNIT_ASSERT_EQUAL(aStr1, aStr2); + } + } +} ScCopyPasteTest::ScCopyPasteTest() : ScBootstrapFixture( "sc/qa/unit/data" ) diff --git a/sc/qa/unit/data/ods/tdf137624_autofillMergedMixed.ods b/sc/qa/unit/data/ods/tdf137624_autofillMergedMixed.ods new file mode 100644 index 0000000000000000000000000000000000000000..cc1b6a7c6ab8bc1984bdd8188e81b2557e900f84 GIT binary patch literal 17389 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 literal 0 HcmV?d00001 diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx index 2e29cecff86b..a777aca898ae 100644 --- a/sc/source/core/data/table4.cxx +++ b/sc/source/core/data/table4.cxx @@ -420,25 +420,9 @@ void ScTable::FillAnalyse( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, } else if (eCellType == CELLTYPE_STRING || eCellType == CELLTYPE_EDIT) { - OUString aStr; + OUString aStr,aStr2; GetString(nColCurr, nRowCurr, aStr); - bool bAllSame = true; - for (SCSIZE i = 0; i < nValueCount; ++i) - { - OUString aTestStr; - GetString(static_cast(nCol1 + rNonOverlappedCellIdx[i] * nAddX), - static_cast(nRow1 + rNonOverlappedCellIdx[i] * nAddY), - aTestStr); - if (aStr != aTestStr) - { - bAllSame = false; - break; - } - } - if (bAllSame && nValueCount > 1) - return; - rListData = const_cast(ScGlobal::GetUserList()->GetData(aStr)); if (rListData) { @@ -450,10 +434,10 @@ void ScTable::FillAnalyse( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, { nColCurr = nCol1 + rNonOverlappedCellIdx[i] * nAddX; nRowCurr = nRow1 + rNonOverlappedCellIdx[i] * nAddY; - GetString(nColCurr, nRowCurr, aStr); + GetString(nColCurr, nRowCurr, aStr2); nPrevListIndex = rListIndex; - if (!rListData->GetSubIndex(aStr, rListIndex, bMatchCase)) + if (!rListData->GetSubIndex(aStr2, rListIndex, bMatchCase)) rListData = nullptr; else { @@ -472,7 +456,45 @@ void ScTable::FillAnalyse( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, return; } } - // TODO: check / handle if it is a string containing a number + short nFlag1, nFlag2; + sal_Int32 nVal1, nVal2; + nFlag1 = lcl_DecompValueString(aStr, nVal1, &rMinDigits); + if (nFlag1) + { + bool bVal = true; + rInc = 1; + for (SCSIZE i = 1; i < nValueCount && bVal; i++) + { + nColCurr = nCol1 + rNonOverlappedCellIdx[i] * nAddX; + nRowCurr = nRow1 + rNonOverlappedCellIdx[i] * nAddY; + ScRefCellValue aCell = GetCellValue(nColCurr, nRowCurr); + CellType eType = aCell.meType; + if (eType == CELLTYPE_STRING || eType == CELLTYPE_EDIT) + { + aStr2 = aCell.getString(&rDocument); + nFlag2 = lcl_DecompValueString(aStr2, nVal2, &rMinDigits); + if (nFlag1 == nFlag2 && aStr == aStr2) + { + double nDiff = approxDiff(nVal2, nVal1); + if (i == 1) + rInc = nDiff; + else if (!::rtl::math::approxEqual(nDiff, rInc, 13)) + bVal = false; + nVal1 = nVal2; + } + else + bVal = false; + } + else + bVal = false; + } + if (bVal) + { + rCmd = FILL_LINEAR; + rSkipOverlappedCells = true; + return; + } + } } } } @@ -2341,16 +2363,25 @@ void ScTable::FillSeries( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, tools::Long nIndex = 0; bool bError = false; bool bOverflow = false; + bool bNonEmpty = true; bool bIsOrdinalSuffix = aValue == ScGlobal::GetOrdinalSuffix( static_cast(nStartVal)); + sal_Int32 nFillerIdx = 0; + if (bSkipOverlappedCells && !aIsNonEmptyCell[0]) + --nIndex; rInner = nIStart; while (true) { + if (bSkipOverlappedCells) + { + nFillerIdx = (nFillerIdx + 1) % nFillerCount; + bNonEmpty = aIsNonEmptyCell[nFillerIdx]; + } if(!ColHidden(nCol) && !RowHidden(nRow)) { - if (!bError) + if (!bError && bNonEmpty) { switch (eFillCmd) { @@ -2381,7 +2412,7 @@ void ScTable::FillSeries( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, if (bError) aCol[nCol].SetError(static_cast(nRow), FormulaError::NoValue); - else if (!bOverflow) + else if (!bOverflow && bNonEmpty) { nStringValue = static_cast(nVal); if ( nHeadNoneTail < 0 )