diff options
Diffstat (limited to 'sc/source/ui/unoobj/cellsuno.cxx')
-rw-r--r-- | sc/source/ui/unoobj/cellsuno.cxx | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 9364a93139e1..622307974a75 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; |