When formatting numbers with DataFormatter, handle brackets following colours

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@954416 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2010-06-14 11:45:09 +00:00
parent 5c68b8bd76
commit 5c3415e09c
3 changed files with 41 additions and 2 deletions

View File

@ -34,6 +34,7 @@
<changes>
<release version="3.7-beta2" date="2010-??-??">
<action dev="POI-DEVELOPERS" type="fix">When formatting numbers with DataFormatter, handle brackets following colours</action>
</release>
<release version="3.7-beta1" date="2010-06-16">
<action dev="POI-DEVELOPERS" type="add">48574 - further XWPF support for tables, paragraphs, including enhanced support for adding new ones</action>

View File

@ -233,14 +233,14 @@ public class DataFormatter {
int at = formatStr.indexOf(colour);
if(at == -1) break;
String nFormatStr = formatStr.substring(0,at) +
formatStr.substring(at+colour.length()+1);
formatStr.substring(at+colour.length());
if(nFormatStr.equals(formatStr)) break;
// Try again in case there's multiple
formatStr = nFormatStr;
colourM = colorPattern.matcher(formatStr);
}
// try to extract special characters like currency
Matcher m = specialPatternGroup.matcher(formatStr);
while(m.find()) {

View File

@ -77,6 +77,44 @@ public class TestDataFormatter extends TestCase {
assertEquals("[ab]12.34[x]", dfUS.formatRawCellContents(12.343, -1, "[ab]##.##[x]"));
}
public void testColoursAndBrackets() {
DataFormatter dfUS = new DataFormatter(Locale.US);
// Without currency symbols
String[] formats = new String[] {
"#,##0.00;[Blue](#,##0.00)",
};
for(String format : formats) {
assertEquals(
"Wrong format for: " + format,
"12.34",
dfUS.formatRawCellContents(12.343, -1, format)
);
assertEquals(
"Wrong format for: " + format,
"(12.34)",
dfUS.formatRawCellContents(-12.343, -1, format)
);
}
// With
formats = new String[] {
"$#,##0.00;[Red]($#,##0.00)"
};
for(String format : formats) {
assertEquals(
"Wrong format for: " + format,
"$12.34",
dfUS.formatRawCellContents(12.343, -1, format)
);
assertEquals(
"Wrong format for: " + format,
"($12.34)",
dfUS.formatRawCellContents(-12.343, -1, format)
);
}
}
/**
* Test how we handle negative and zeros.
* Note - some tests are disabled as DecimalFormat