From c9f6bd6a714b634c1f366a525cc3571116c3f9f5 Mon Sep 17 00:00:00 2001 From: Winfried Donkers Date: Wed, 5 Jul 2017 17:07:08 +0200 Subject: tdf#107135, add missing ODFF function REPLACEB. Change-Id: I8d782b109eb390838b6c4f3a85e9b344ecef87ec Reviewed-on: https://gerrit.libreoffice.org/39606 Reviewed-by: Eike Rathke Tested-by: Jenkins --- formula/source/core/resource/core_resource.src | 6 + include/formula/compiler.hrc | 3 +- include/formula/opcode.hxx | 1 + sc/inc/helpids.h | 1 + sc/qa/unit/data/functions/text/fods/replaceb.fods | 2096 +++++++++++++++++++++ sc/qa/unit/ucalc.cxx | 1 + sc/source/core/data/funcdesc.cxx | 3 +- sc/source/core/inc/interpre.hxx | 1 + sc/source/core/tool/interpr1.cxx | 23 + sc/source/core/tool/interpr4.cxx | 1 + sc/source/filter/excel/xlformula.cxx | 1 + sc/source/filter/oox/formulabase.cxx | 2 +- sc/source/ui/src/scfuncs.src | 15 + 13 files changed, 2151 insertions(+), 3 deletions(-) create mode 100644 sc/qa/unit/data/functions/text/fods/replaceb.fods diff --git a/formula/source/core/resource/core_resource.src b/formula/source/core/resource/core_resource.src index 584aa1746faa..1c98ff43263e 100644 --- a/formula/source/core/resource/core_resource.src +++ b/formula/source/core/resource/core_resource.src @@ -289,6 +289,7 @@ StringArray RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF < "LENB" ; SC_OPCODE_LENB; >; < "RIGHTB" ; SC_OPCODE_RIGHTB; >; < "LEFTB" ; SC_OPCODE_LEFTB; >; + < "REPLACEB" ; SC_OPCODE_REPLACEB; >; < "MIDB" ; SC_OPCODE_MIDB; >; < "TEXT" ; SC_OPCODE_TEXT; >; < "SUBSTITUTE" ; SC_OPCODE_SUBSTITUTE; >; @@ -731,6 +732,7 @@ StringArray RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML < "LENB" ; SC_OPCODE_LENB; >; < "RIGHTB" ; SC_OPCODE_RIGHTB; >; < "LEFTB" ; SC_OPCODE_LEFTB; >; + < "REPLACEB" ; SC_OPCODE_REPLACEB; >; < "MIDB" ; SC_OPCODE_MIDB; >; < "TEXT" ; SC_OPCODE_TEXT; >; < "SUBSTITUTE" ; SC_OPCODE_SUBSTITUTE; >; @@ -1176,6 +1178,7 @@ StringArray RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF < "LENB" ; SC_OPCODE_LENB; >; < "RIGHTB" ; SC_OPCODE_RIGHTB; >; < "LEFTB" ; SC_OPCODE_LEFTB; >; + < "REPLACEB" ; SC_OPCODE_REPLACEB; >; < "MIDB" ; SC_OPCODE_MIDB; >; < "TEXT" ; SC_OPCODE_TEXT; >; < "SUBSTITUTE" ; SC_OPCODE_SUBSTITUTE; >; @@ -1622,6 +1625,7 @@ StringArray RID_STRLIST_FUNCTION_NAMES_ENGLISH_API < "LENB" ; SC_OPCODE_LENB; >; < "RIGHTB" ; SC_OPCODE_RIGHTB; >; < "LEFTB" ; SC_OPCODE_LEFTB; >; + < "REPLACEB" ; SC_OPCODE_REPLACEB; >; < "MIDB" ; SC_OPCODE_MIDB; >; < "TEXT" ; SC_OPCODE_TEXT; >; < "SUBSTITUTE" ; SC_OPCODE_SUBSTITUTE; >; @@ -2066,6 +2070,7 @@ StringArray RID_STRLIST_FUNCTION_NAMES_ENGLISH < "LENB" ; SC_OPCODE_LENB; >; < "RIGHTB" ; SC_OPCODE_RIGHTB; >; < "LEFTB" ; SC_OPCODE_LEFTB; >; + < "REPLACEB" ; SC_OPCODE_REPLACEB; >; < "MIDB" ; SC_OPCODE_MIDB; >; < "TEXT" ; SC_OPCODE_TEXT; >; < "SUBSTITUTE" ; SC_OPCODE_SUBSTITUTE; >; @@ -2486,6 +2491,7 @@ StringArray RID_STRLIST_FUNCTION_NAMES < "LENB" ; SC_OPCODE_LENB ; >; < "RIGHTB" ; SC_OPCODE_RIGHTB ; >; < "LEFTB" ; SC_OPCODE_LEFTB ; >; + < "REPLACEB" ; SC_OPCODE_REPLACEB; >; < "MIDB" ; SC_OPCODE_MIDB ; >; < "TEXT" ; SC_OPCODE_TEXT ; >; < "SUBSTITUTE" ; SC_OPCODE_SUBSTITUTE ; >; diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc index 12fa1c482636..4f625f589cbc 100644 --- a/include/formula/compiler.hrc +++ b/include/formula/compiler.hrc @@ -502,7 +502,8 @@ #define SC_OPCODE_MINIFS_MS 491 #define SC_OPCODE_MAXIFS_MS 492 #define SC_OPCODE_ROUNDSIG 493 -#define SC_OPCODE_STOP_2_PAR 494 /* last function with two or more parameters' OpCode + 1 */ +#define SC_OPCODE_REPLACEB 494 +#define SC_OPCODE_STOP_2_PAR 495 /* last function with two or more parameters' OpCode + 1 */ #define SC_OPCODE_STOP_FUNCTION SC_OPCODE_STOP_2_PAR /* last function's OpCode + 1 */ #define SC_OPCODE_LAST_OPCODE_ID (SC_OPCODE_STOP_FUNCTION - 1) /* last OpCode */ diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx index 9aa19d2f5d81..90223b141b7f 100644 --- a/include/formula/opcode.hxx +++ b/include/formula/opcode.hxx @@ -340,6 +340,7 @@ enum OpCode : sal_uInt16 ocRightB = SC_OPCODE_RIGHTB, ocLeftB = SC_OPCODE_LEFTB, ocMidB = SC_OPCODE_MIDB, + ocReplaceB = SC_OPCODE_REPLACEB, ocNumberValue = SC_OPCODE_NUMBERVALUE, // Matrix functions ocMatValue = SC_OPCODE_MAT_VALUE, diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h index 0d366b6ad4b5..780470cc5f89 100644 --- a/sc/inc/helpids.h +++ b/sc/inc/helpids.h @@ -583,5 +583,6 @@ #define HID_FUNC_MINIFS_MS "SC_HID_FUNC_MINIFS_MS" #define HID_FUNC_MAXIFS_MS "SC_HID_FUNC_MAXIFS_MS" #define HID_FUNC_ROUNDSIG "SC_HID_FUNC_ROUNDSIG" +#define HID_FUNC_REPLACEB "SC_HID_FUNC_REPLACEB" /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/data/functions/text/fods/replaceb.fods b/sc/qa/unit/data/functions/text/fods/replaceb.fods new file mode 100644 index 000000000000..dda7a26fee73 --- /dev/null +++ b/sc/qa/unit/data/functions/text/fods/replaceb.fods @@ -0,0 +1,2096 @@ + + + + 2017-07-04T14:48:09.4272387572017-07-06T19:24:21.086006189PT53M58S16LibreOfficeDev/6.0.0.0.alpha0$Linux_X86_64 LibreOffice_project/3ddbb0e4797448749643e1f43dd5fcfde1486728 + + + 0 + 0 + 37932 + 16495 + + + view1 + + + 2 + 8 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 100 + 60 + true + false + + + 2 + 2 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 100 + 60 + true + false + + + Sheet1 + 993 + 0 + 100 + 60 + false + true + true + true + 12632256 + true + true + true + true + true + false + false + 1000 + 1000 + 1 + 1 + true + false + + + + + 7 + true + false + false + 0 + true + kQH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMAsgAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCm1hcmdpbmRhanVzdG1lbnQ9MCwwLDAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MApjb2xvcmRldmljZT0wClBQRENvbnRleERhdGEKUGFnZVNpemU6QTQARHVwbGV4Ok5vbmUAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmY= + Generic Printer + + + zh + CN + + :!),.:;?]}¢'"、。〉》」』】〕〗〞︰︱︳﹐、﹒﹔﹕﹖﹗﹚﹜﹞!),.:;?|}︴︶︸︺︼︾﹀﹂﹄﹏、~¢々‖•·ˇˉ―--′’” + ([{£¥'"‵〈《「『【〔〖([{£¥〝︵︷︹︻︽︿﹁﹃﹙﹛﹝({“‘ + + + true + 3 + true + false + true + true + 12632256 + true + true + true + false + true + false + true + 1 + false + 1000 + 1000 + false + 1 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + £ + + + + - + £ + + + + + £ + + + + - + £ + + + + + £ + + + + + - + £ + + + + + £ + + + + + - + £ + + + + + £ + + + + + - + £ + + + + + + + + + ( + + ) + + + + + + + + ( + + ) + + + + £ + + + + + - + £ + + + + + + £ + + + + + - + £ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + R$ + + + + + + - + R$ + + + + + + + + + + + + - + + + + + + + \ + + + + \- + + + + + \ + + + + + \- + + + + + \ + + + + \- + + + + + \ + + + + + \- + + + + + $ + + + + + ($ + + ) + + + + $ + + + + + + ($ + + ) + + + + $ + + + + + ($ + + ) + + + + $ + + + + + + ($ + + ) + + + + + + + + + + + + - + + + + + + + - + + + + + + + + + + + \ + + + + + + \ + + - + + + + + \ + + - + + + + + + + + + + + + + + + + + + + - + + + + + + + - + + + + + + + + + + + + + \ + + + + + + \ + + - + + + + + \ + + - + + + + + + + + + + + + + + : + + + + + : + + : + + + + + : + + + + + + + + + Lt + + + + - + + + Lt + + + + + / + + / + + + + + - + + - + + + + + - + + + + + - + + + + + : + + + + + + + : + + : + + + + + + + : + + + + + : + + : + + + + + / + + / + + + + : + + + + + + + + + ( + + ) + + + + + + + + + ( + + ) + + + + + + + + + ( + + + ) + + + + + + + + + + ( + + + ) + + + + + + + + + ( + + + ) + + + + + + + + + + ( + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ??? + + + + Page 1 + + + + + + + ???(???) + + + 00-00-0000, 00:00:00 + + + + + Page 1/ 99 + + + + + + + + + + + + + + REPLACEB Function + + + + + + + + + Result + + + WAAR + + + + + + + + + Sheet + + + Result + + + Description + + + + + 1 + + + WAAR + + + Simple REPLACEB formulas with local references and values + + + + + + + + + + + + + + + + + + + + + + Function + + + Expected + + + Correct + + + FunctionString + + + Comment + + + + ᄩᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + + + + ab ᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ab ᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K2;L2;"ab") + + + + 1 + + + 33 + + + + + abᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + abᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K3;L3;"ab") + + + + 2 + + + 1 + + + 33 + + + + + ᄩab ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩab ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K4;L4;"ab") + + + + 3 + + + 1 + + + 33 + + + + + ᄩ abᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩ abᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K5;L5;"ab") + + + + 4 + + + 1 + + + 33 + + + + + ᄩᄔab ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄔab ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K6;L6;"ab") + + + + 5 + + + 1 + + + 33 + + + + + ᄩᄔ abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄔ abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K7;L7;"ab") + + + + 6 + + + 1 + + + 33 + + + + + abᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + abᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K8;L8;"ab") + + + + 2 + + + 1 + + + 33 + + + + + ab ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ab ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K9;L9;"ab") + + + + 2 + + + 32 + + + + + abᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + abᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K10;L10;"ab") + + + + 2 + + + 3 + + + 31 + + + + + ab ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ab ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K11;L11;"ab") + + + + 2 + + + 4 + + + 30 + + + + + abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K12;L12;"ab") + + + + 2 + + + 5 + + + 29 + + + + + ab ᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ab ᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K13;L13;"ab") + + + + 2 + + + 6 + + + 28 + + + + + ab ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ab ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K14;L14;"ab") + + + + 2 + + + 32 + + + + + ᄩab ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩab ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K15;L15;"ab") + + + + 3 + + + 31 + + + + + ᄩ ab ᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩ ab ᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K16;L16;"ab") + + + + 4 + + + 30 + + + + + ᄩᄔab ᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄔab ᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K17;L17;"ab") + + + + 5 + + + 29 + + + + + ᄩᄔ ab ᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄔ ab ᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K18;L18;"ab") + + + + 6 + + + 28 + + + + + abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K19;L19;"ab") + + + + 1 + + + 6 + + + 28 + + + + + abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K20;L20;"ab") + + + + 2 + + + 5 + + + 29 + + + + + ᄩabᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩabᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K21;L21;"ab") + + + + 3 + + + 4 + + + 30 + + + + + ᄩ abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩ abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K22;L22;"ab") + + + + 4 + + + 3 + + + 31 + + + + + ᄩᄔabᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄔabᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K23;L23;"ab") + + + + 5 + + + 2 + + + 32 + + + + + ᄩᄔ abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄔ abᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K24;L24;"ab") + + + + 6 + + + 1 + + + 33 + + + + + ᄩ ᄬᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩ ᄬᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K25;L25;"ᄬ") + + + + 4 + + + 1 + + + 33 + + + + + ᄩ ᄬ ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩ ᄬ ᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K26;L26;"ᄬ") + + + + 4 + + + 2 + + + 32 + + + + + ᄩᄬ ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄬ ᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K27;L27;"ᄬ") + + + + 3 + + + 1 + + + 33 + + + + + ᄩᄬᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ᄩᄬᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;K28;L28;"ᄬ") + + + + 3 + + + 2 + + + 32 + + + + + Err:502 + + + Err:502 + + + WAAR + + + =REPLACEB($K$1;0;3;"ab") + + + + The quick brown fox jumped… + + + + + + ab ᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + ab ᄔᄕᄜᄝᄞᄠᄢᄣᄫᄬᄭᄮᄯᄲᄶ + + + WAAR + + + =REPLACEB($K$1;2;0;"ab") + + + + + + Err:502 + + + Err:502 + + + WAAR + + + =REPLACEB($K$1;2;-1;"ab") + + + + + + Err:502 + + + Err:502 + + + WAAR + + + =REPLACEB($K$1;-2;4;"ab") + + + + + + The slow brown fox jumped… + + + The slow brown fox jumped… + + + WAAR + + + =REPLACEB($K$29;5;5;"slow") + + + + + + Err:502 + + + Err:502 + + + WAAR + + + =REPLACEB($K$29;25;5;"slow") + + + + + + Err:502 + + + Err:502 + + + WAAR + + + =REPLACEB($K$29;5;25;"slow") + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 80030994a8c2..6cf23658234b 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -2635,6 +2635,7 @@ void Test::testFunctionLists() "NUMBERVALUE", "PROPER", "REPLACE", + "REPLACEB", "REPT", "RIGHT", "RIGHTB", diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx index 916264fd9fd9..34898e116c9e 100644 --- a/sc/source/core/data/funcdesc.cxx +++ b/sc/source/core/data/funcdesc.cxx @@ -798,7 +798,8 @@ ScFunctionList::ScFunctionList() { SC_OPCODE_SWITCH_MS, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_SWITCH_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 } }, { SC_OPCODE_MINIFS_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MINIFS_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 } }, { SC_OPCODE_MAXIFS_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MAXIFS_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 } }, - { SC_OPCODE_ROUNDSIG, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ROUNDSIG, 2, { 0, 0 } } + { SC_OPCODE_ROUNDSIG, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ROUNDSIG, 2, { 0, 0 } }, + { SC_OPCODE_REPLACEB, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_REPLACEB, 4, { 0, 0, 0, 0 } } }; ScFuncDesc* pDesc = nullptr; diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx index d44d1141d73b..0e038094d5dc 100644 --- a/sc/source/core/inc/interpre.hxx +++ b/sc/source/core/inc/interpre.hxx @@ -949,6 +949,7 @@ void ScLenB(); void ScRightB(); void ScLeftB(); void ScMidB(); +void ScReplaceB(); void ScFilterXML(); void ScWebservice(); diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index 35665811c462..5209f40479b1 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -8737,6 +8737,29 @@ void ScInterpreter::ScMidB() } } +void ScInterpreter::ScReplaceB() +{ + if ( MustHaveParamCount( GetByte(), 4 ) ) + { + OUString aNewStr = GetString().getString(); + double fCount = GetStringPositionArgument(); + double fPos = GetStringPositionArgument(); + OUString aOldStr = GetString().getString(); + int nLen = getLengthB( aOldStr ); + if ( fPos < 1.0 || fPos > nLen || fCount < 0.0 || fPos + fCount -1 > nLen ) + PushIllegalArgument(); + else + { + // REPLACEB(aOldStr;fPos;fCount;aNewStr) is the same as + // LEFTB(aOldStr;fPos-1) & aNewStr & RIGHT(aOldStr;LENB(aOldStr)-(fPos - 1)-fCount) + OUString aStr1 = lcl_LeftB( aOldStr, fPos - 1 ); + OUString aStr3 = lcl_RightB( aOldStr, nLen - fPos - fCount + 1); + + PushString( aStr1 + aNewStr + aStr3 ); + } + } +} + void ScInterpreter::ScRight() { sal_uInt8 nParamCount = GetByte(); diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 9ee855897f2a..53eeb96b4d0e 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -4419,6 +4419,7 @@ StackVar ScInterpreter::Interpret() case ocRightB : ScRightB(); break; case ocLeftB : ScLeftB(); break; case ocMidB : ScMidB(); break; + case ocReplaceB : ScReplaceB(); break; case ocUnicode : ScUnicode(); break; case ocUnichar : ScUnichar(); break; case ocBitAnd : ScBitAnd(); break; diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx index 0978c24e4864..efc246c57796 100644 --- a/sc/source/filter/excel/xlformula.cxx +++ b/sc/source/filter/excel/xlformula.cxx @@ -213,6 +213,7 @@ static const XclFunctionInfo saFuncTable_2[] = { ocIsLogical, 198, 1, 1, V, { VR }, 0, nullptr }, { ocDBCount2, 199, 3, 3, V, { RO, RR }, 0, nullptr }, { ocCurrency, 204, 1, 2, V, { VR }, EXC_FUNCFLAG_IMPORTONLY, nullptr }, + { ocReplaceB, 207, 4, 4, V, { VR }, 0, nullptr }, { ocLeftB, 208, 1, 2, V, { VR }, 0, nullptr }, { ocRightB, 209, 1, 2, V, { VR }, 0, nullptr }, { ocMidB, 210, 3, 3, V, { VR }, 0, nullptr }, diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx index 1887efcd99ed..a26dd6884af8 100644 --- a/sc/source/filter/oox/formulabase.cxx +++ b/sc/source/filter/oox/formulabase.cxx @@ -389,7 +389,7 @@ static const FunctionData saFuncTableBiff3[] = { "DOLLAR", "USDOLLAR", 204, 204, 1, 2, V, { VR }, FuncFlags::IMPORTONLY }, { nullptr/*"FIND"*/, "FINDB", 205, 205, 2, 3, V, { VR }, FuncFlags::NONE }, { nullptr/*"SEARCH"*/, "SEARCHB", 206, 206, 2, 3, V, { VR }, FuncFlags::NONE }, - { nullptr/*"REPLACE"*/, "REPLACEB", 207, 207, 4, 4, V, { VR }, FuncFlags::NONE }, + { "REPLACEB", "REPLACEB", 207, 207, 4, 4, V, { VR }, FuncFlags::NONE }, { "LEFTB", "LEFTB", 208, 208, 1, 2, V, { VR }, FuncFlags::NONE }, { "RIGHTB", "RIGHTB", 209, 209, 1, 2, V, { VR }, FuncFlags::NONE }, { "MIDB", "MIDB", 210, 210, 3, 3, V, { VR }, FuncFlags::NONE }, diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src index 645c377c635b..6f472189a94a 100644 --- a/sc/source/ui/src/scfuncs.src +++ b/sc/source/ui/src/scfuncs.src @@ -4856,5 +4856,20 @@ StringArray SC_OPCODE_ROUNDSIG+RID_SC_FUNC_DESCRIPTIONS_START < "The number of significant digits to which value is to be rounded." ; >; }; }; +StringArray SC_OPCODE_REPLACEB+RID_SC_FUNC_DESCRIPTIONS_START +{ + ItemList [ en-US ] = + { + < "Replaces characters within a text string with a different text string, with DBCS." ; >; + < "Text" ; >; + < "The text in which some characters are to be replaced." ; >; + < "position" ; >; + < "The character position from which text is to be replaced." ; >; + < "length" ; >; + < "The number of characters to be replaced." ; >; + < "new text" ; >; + < "The text to be inserted." ; >; + }; +}; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit