You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/08/07 11:52:35 UTC
svn commit: r1892070 - in /poi/trunk/poi/src:
main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java
test/java/org/apache/poi/ss/formula/atp/TestTextJoinFunction.java
Author: fanningpj
Date: Sat Aug 7 11:52:35 2021
New Revision: 1892070
URL: http://svn.apache.org/viewvc?rev=1892070&view=rev
Log:
fix TextJoin use case that was not handled
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestTextJoinFunction.java
Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java?rev=1892070&r1=1892069&r2=1892070&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/TextJoinFunction.java Sat Aug 7 11:52:35 2021
@@ -96,14 +96,14 @@ final class TextJoinFunction implements
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<String> 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
}
}
+ 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
Modified: poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestTextJoinFunction.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestTextJoinFunction.java?rev=1892070&r1=1892069&r2=1892070&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestTextJoinFunction.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestTextJoinFunction.java Sat Aug 7 11:52:35 2021
@@ -201,6 +201,8 @@ public class TestTextJoinFunction {
HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100);
confirmResult(fe, cell, "TEXTJOIN(A8:D8, TRUE, A2:D7)",
"Tulsa,OK,74133,US;Seattle,WA,98109,US;Iselin,NJ,08830,US;Fort Lauderdale,FL,33309,US;Tempe,AZ,85285,US;end");
+ confirmResult(fe, cell, "TEXTJOIN(, TRUE, A2:D7)",
+ "TulsaOK74133USSeattleWA98109USIselinNJ08830USFort LauderdaleFL33309USTempeAZ85285USend");
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org