fdo#32082: Do not reset number format in table cells on edit.

When we changed the default to _not_ to recognize the number formats in table
cells (commit 334c34e4ec803c65e43abf20edbc6faf7fa95e76), it caused that any
edit of a number formatted cell had reset it to text on edit.

This was quite unexpected, because when eg. there was a number that contributed
to a sum, and it changed to text, the sum changed as if there was a '0' there.

To solve this, try hard to retain the number format regardless of the
'Recognize Number Formats' setting when there was a number formatting assigned
to the cell.

Change-Id: Ib43e0877420d90cdac7a0357d1ef3a549c866fb7
diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx
index 4fd72a8..398dd6a 100644
--- a/sw/source/core/docnode/ndtbl.cxx
+++ b/sw/source/core/docnode/ndtbl.cxx
@@ -4028,31 +4028,35 @@ void SwDoc::ChkBoxNumFmt( SwTableBox& rBox, sal_Bool bCallUpdate )
            SwTableBoxFmt* pBoxFmt = (SwTableBoxFmt*)rBox.GetFrmFmt();
            SfxItemSet aBoxSet( GetAttrPool(), RES_BOXATR_FORMAT, RES_BOXATR_VALUE );

            sal_Bool bSetNumFmt = IsInsTblFormatNum();
            sal_Bool bLockModify = sal_True;
            sal_Bool bSetNumFmt = sal_False;
            const bool bForceNumberFormat = IsInsTblFormatNum() && IsInsTblChangeNumFormat();

            if( bSetNumFmt && !IsInsTblChangeNumFormat() )
            // if the user forced a number format in this cell previously,
            // keep it, unless the user set that she wants the full number
            // format recognition
            if( pNumFmtItem && !bForceNumberFormat )
            {
                if( !pNumFmtItem )
                    bSetNumFmt = sal_False;
                sal_uLong nOldNumFmt = ((SwTblBoxNumFormat*)pNumFmtItem)->GetValue();
                SvNumberFormatter* pNumFmtr = GetNumberFormatter();

                short nFmtType = pNumFmtr->GetType( nFmtIdx );
                if( nFmtType == pNumFmtr->GetType( nOldNumFmt ) || NUMBERFORMAT_NUMBER == nFmtType )
                {
                    // Current and specified NumFormat match
                    // -> keep old Format
                    nFmtIdx = nOldNumFmt;
                    bSetNumFmt = sal_True;
                }
                else
                {
                    sal_uLong nOldNumFmt = ((SwTblBoxNumFormat*)pNumFmtItem)->GetValue();
                    SvNumberFormatter* pNumFmtr = GetNumberFormatter();

                    short nFmtType = pNumFmtr->GetType( nFmtIdx );
                    if( nFmtType == pNumFmtr->GetType( nOldNumFmt ) || NUMBERFORMAT_NUMBER == nFmtType )
                        // Current and specified NumFormat match
                        // -> keep old Format
                        nFmtIdx = nOldNumFmt;
                    else
                        // Current and specified NumFormat do not match
                        // -> insert as Text
                        bLockModify = bSetNumFmt = sal_False;
                    // Current and specified NumFormat do not match
                    // -> insert as Text
                    bLockModify = bSetNumFmt = sal_False;
                }
            }

            if( bSetNumFmt )
            if( bSetNumFmt || bForceNumberFormat )
            {
                pBoxFmt = (SwTableBoxFmt*)rBox.ClaimFrmFmt();