From 87ea84cf48cc115994b4dfa2f2c6ee00febe1d92 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 7 Aug 2021 11:52:35 +0000 Subject: fix TextJoin use case that was not handled git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1892070 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'poi/src/main/java') diff --git a/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java b/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java index 8cd588715a..85a527261f 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java @@ -96,14 +96,14 @@ final class TextJoinFunction implements FreeRefFunction { if (delimiterArgs.size() == 0) { return new StringEval(String.join("", textValues)); } else if (delimiterArgs.size() == 1) { - String delimiter = OperandResolver.coerceValueToString(delimiterArgs.get(0)); + String delimiter = coerceValueToString(delimiterArgs.get(0)); return new StringEval(String.join(delimiter, textValues)); } else { //https://support.microsoft.com/en-us/office/textjoin-function-357b449a-ec91-49d0-80c3-0e8fc845691c //see example 3 to see why this is needed List delimiters = new ArrayList<>(); for (ValueEval delimiterArg: delimiterArgs) { - delimiters.add(OperandResolver.coerceValueToString(delimiterArg)); + delimiters.add(coerceValueToString(delimiterArg)); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < textValues.size(); i++) { @@ -120,6 +120,10 @@ final class TextJoinFunction implements FreeRefFunction { } } + private String coerceValueToString(ValueEval eval) { + return (eval instanceof MissingArgEval) ? "" : OperandResolver.coerceValueToString(eval); + } + //https://support.microsoft.com/en-us/office/textjoin-function-357b449a-ec91-49d0-80c3-0e8fc845691c //in example 3, the delimiter is defined by a large area but only the last row of that area seems to be used //this is why lastRowOnly is supported -- cgit v1.2.3