sc/source/ui/unoobj/cellsuno.cxx |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

New commits:
commit 2d11710df6d81c03007d136667a443e09cc70eed
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Tue Dec 28 19:55:29 2021 +0100
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Wed Jan 12 17:18:23 2022 +0100

    tdf#146454 - Check for multiline string in setDataArray
    
    Check for a multiline string in the setDataArray function. If that is
    the case, set a string or edit cell. Otherwise, just set a plain string in 
order to prevent performance issues due to the adjustments of the row height.
    
    Regression from b9e2c5d2a36fbd189c20448cadf4212edf02914d
    
    Change-Id: I9216b198b878fda5da29596d25504db853acd756
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127660
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>

diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index dc7369a06a8e..d8a5dc5fe43a 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -1082,7 +1082,7 @@ static bool lcl_PutDataArray( ScDocShell& rDocShell, 
const ScRange& rRange,
                         const uno::Sequence< uno::Sequence<uno::Any> >& aData )
 {
     ScDocument& rDoc = rDocShell.GetDocument();
-    ScDocFunc& rDocFunc = rDocShell.GetDocFunc();
+    ScFieldEditEngine& rEngine = rDoc.GetEditEngine();
     SCTAB nTab = rRange.aStart.Tab();
     SCCOL nStartCol = rRange.aStart.Col();
     SCROW nStartRow = rRange.aStart.Row();
@@ -1159,7 +1159,19 @@ static bool lcl_PutDataArray( ScDocShell& rDocShell, 
const ScRange& rRange,
                         rElement >>= aUStr;
                         if ( !aUStr.isEmpty() )
                         {
-                            rDocFunc.SetStringOrEditCell(aPos, aUStr, false);
+                            // tdf#146454 - check for a multiline string since 
setting an edit
+                            // or string cell is in magnitudes slower than 
setting a plain string
+                            if (ScStringUtil::isMultiline(aUStr))
+                            {
+                                rEngine.SetTextCurrentDefaults(aUStr);
+                                rDoc.SetEditText(aPos, 
rEngine.CreateTextObject());
+                            }
+                            else
+                            {
+                                ScSetStringParam aParam;
+                                aParam.setTextInput();
+                                rDoc.SetString(aPos, aUStr, &aParam);
+                            }
                         }
                     }
                     break;

Reply via email to