mirror of https://github.com/apache/poi.git
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
This commit is contained in:
parent
f00456e38d
commit
87ea84cf48
|
@ -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<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 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
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue