From 730e6fa063fccbd12913362dd5d3c74ea14957be Mon Sep 17 00:00:00 2001 From: Baole Fang Date: Sat, 27 May 2023 21:05:01 -0400 Subject: [PATCH] tdf#131638: Fix text cell incorrect formula Change-Id: I086f077540f52c6ed5fb4df9f0ea64aa95aea152 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152348 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- sc/qa/uitest/calc_tests8/tdf131638.py | 26 ++++++++++++++++++++++++++ sc/qa/uitest/data/tdf131638.ods | Bin 0 -> 7381 bytes sc/source/ui/view/viewfunc.cxx | 10 +++++----- 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 sc/qa/uitest/calc_tests8/tdf131638.py create mode 100644 sc/qa/uitest/data/tdf131638.ods diff --git a/sc/qa/uitest/calc_tests8/tdf131638.py b/sc/qa/uitest/calc_tests8/tdf131638.py new file mode 100644 index 000000000000..bafbfc5d8567 --- /dev/null +++ b/sc/qa/uitest/calc_tests8/tdf131638.py @@ -0,0 +1,26 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from uitest.uihelper.common import get_url_for_data_file +from libreoffice.calc.document import get_cell_by_position +from libreoffice.uno.propertyvalue import mkPropertyValues + +class tdf137726(UITestCase): + + def test_tdf137726(self): + with self.ui_test.load_file(get_url_for_data_file("tdf131638.ods")) as calc_doc: + MainWindow = self.xUITest.getTopFocusWindow() + grid_window = MainWindow.getChild("grid_window") + grid_window.executeAction("SELECT", mkPropertyValues({"CELL": "A1"})) + grid_window.executeAction("TYPE", mkPropertyValues({"TEXT": "-/2"})) + grid_window.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) + self.assertEqual(get_cell_by_position(calc_doc, 0, 0, 0).getString(), "-/2") + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/data/tdf131638.ods b/sc/qa/uitest/data/tdf131638.ods new file mode 100644 index 0000000000000000000000000000000000000000..a66a7e9c9de949ff4680242778e502976f878501 GIT binary patch literal 7381 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 literal 0 HcmV?d00001 diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index 78080364e928..bc149f62b40e 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -408,8 +408,11 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, bool bFormula = false; + // do not check formula if it is a text cell + sal_uInt32 format = rDoc.GetNumberFormat( nCol, nRow, nTab ); + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); // a single '=' character is handled as string (needed for special filters) - if ( rString.getLength() > 1 ) + if ( pFormatter->GetType(format) != SvNumFormatType::TEXT && rString.getLength() > 1 ) { if ( rString[0] == '=' ) { @@ -431,10 +434,8 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, // is non-empty and not a number, handle as formula if ( aString.getLength() > 1 ) { - sal_uInt32 nFormat = rDoc.GetNumberFormat( nCol, nRow, nTab ); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); double fNumber = 0; - if ( !pFormatter->IsNumberFormat( aString, nFormat, fNumber ) ) + if ( !pFormatter->IsNumberFormat( aString, format, fNumber ) ) { bFormula = true; } @@ -568,7 +569,6 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, ScFormulaCell aCell(rDoc, aPos, std::move( pArr ), formula::FormulaGrammar::GRAM_DEFAULT, ScMatrixMode::NONE); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); for (const auto& rTab : rMark) { i = rTab;