public class DataFormatter
extends java.lang.Object
 Internally, formats will be implemented using subclasses of Format
 such as DecimalFormat and SimpleDateFormat. Therefore the
 formats used by this class must obey the same pattern rules as these Format
 subclasses. This means that only legal number pattern characters ("0", "#",
 ".", "," etc.) may appear in number formats. Other characters can be
 inserted before or  after the number pattern to form a
 prefix or suffix.
 
 For example the Excel pattern "$#,##0.00 "USD"_);($#,##0.00 "USD")"
  will be correctly formatted as "$1,000.00 USD" or "($1,000.00 USD)".
 However the pattern "00-00-00" is incorrectly formatted by
 DecimalFormat as "000000--". For Excel formats that are not compatible with
 DecimalFormat, you can provide your own custom Format implementation
 via DataFormatter.addFormat(String,Format). The following
 custom formats are already provided by this class:
 
 If the Excel format pattern cannot be parsed successfully, then a default
 format will be used. The default number format will mimic the Excel General
 format: "#" for whole numbers and "#.##########" for decimal numbers. You
 can override the default format pattern with 
 DataFormatter.setDefaultNumberFormat(Format). Note: the
 default format will only be used when a Format cannot be created from the
 cell's data format string.
 
Note that by default formatted numeric values are trimmed. Excel formats can contain spacers and padding and the default behavior is to strip them off.
Example:
 Consider a numeric cell with a value 12.343 and format "##.##_ ".
  The trailing underscore and space ("_ ") in the format adds a space to the end and Excel formats this cell as "12.34 ",
  but DataFormatter trims the formatted value and returns "12.34".
 
emulateCSV=true flag in the DateFormatter cosntructor.
 If set to true, then the output tries to conform to what you get when you take an xls or xlsx in Excel and Save As CSV file:
 DataFormatter will output "0".
 
  Some formats are automatically "localized" by Excel, eg show as mm/dd/yyyy when
   loaded in Excel in some Locales but as dd/mm/yyyy in others. These are always
   returned in the "default" (US) format, as stored in the file.
  Some format strings request an alternate locale, eg
   [$-809]d/m/yy h:mm AM/PM which explicitly requests UK locale.
   These locale directives are (currently) ignored.
  You can use DateFormatConverter to do some of this localisation if
   you need it.
| Constructor and Description | 
|---|
DataFormatter()
Creates a formatter using the  
default locale. | 
DataFormatter(boolean emulateCSV)
Creates a formatter using the  
default locale. | 
DataFormatter(java.util.Locale locale)
Creates a formatter using the given locale. 
 | 
DataFormatter(java.util.Locale locale,
             boolean emulateCSV)
Creates a formatter using the given locale. 
 | 
DataFormatter(java.util.Locale locale,
             boolean localeIsAdapting,
             boolean emulateCSV)
Creates a formatter using the given locale. 
 | 
| Modifier and Type | Method and Description | 
|---|---|
void | 
addFormat(java.lang.String excelFormatStr,
         java.text.Format format)
Adds a new format to the available formats. 
 | 
java.text.Format | 
createFormat(Cell cell)
Create and return a Format based on the format string from a  cell's
 style. 
 | 
java.lang.String | 
formatCellValue(Cell cell)
 Returns the formatted value of a cell as a String regardless
 of the cell type. 
 | 
java.lang.String | 
formatCellValue(Cell cell,
               FormulaEvaluator evaluator)
 Returns the formatted value of a cell as a String regardless
 of the cell type. 
 | 
java.lang.String | 
formatCellValue(Cell cell,
               FormulaEvaluator evaluator,
               ConditionalFormattingEvaluator cfEvaluator)
 Returns the formatted value of a cell as a String regardless
 of the cell type. 
 | 
java.lang.String | 
formatRawCellContents(double value,
                     int formatIndex,
                     java.lang.String formatString)
Formats the given raw cell value, based on the supplied
  format index and string, according to excel style rules. 
 | 
java.lang.String | 
formatRawCellContents(double value,
                     int formatIndex,
                     java.lang.String formatString,
                     boolean use1904Windowing)
Formats the given raw cell value, based on the supplied
  format index and string, according to excel style rules. 
 | 
java.text.Format | 
getDefaultFormat(Cell cell)
Returns a default format for a cell. 
 | 
java.beans.PropertyChangeSupport | 
getLocaleChangedObservable()
If the Locale has been changed via  
LocaleUtil.setUserLocale(Locale) the stored
 formats need to be refreshed. | 
void | 
setDefaultNumberFormat(java.text.Format format)
 Sets a default number format to be used when the Excel format cannot be
 parsed successfully. 
 | 
static void | 
setExcelStyleRoundingMode(java.text.DecimalFormat format)
Enables excel style rounding mode (round half up) on the
  Decimal Format given. 
 | 
static void | 
setExcelStyleRoundingMode(java.text.DecimalFormat format,
                         java.math.RoundingMode roundingMode)
Enables custom rounding mode on the given Decimal Format. 
 | 
void | 
updateLocale(java.util.Locale newLocale)
Update formats when locale has been changed 
 | 
public DataFormatter()
default locale.public DataFormatter(boolean emulateCSV)
default locale.emulateCSV - whether to emulate CSV output.public DataFormatter(java.util.Locale locale)
public DataFormatter(java.util.Locale locale,
                     boolean emulateCSV)
emulateCSV - whether to emulate CSV output.public DataFormatter(java.util.Locale locale,
                     boolean localeIsAdapting,
                     boolean emulateCSV)
localeIsAdapting - (true only if locale is not user-specified)emulateCSV - whether to emulate CSV output.public java.text.Format createFormat(Cell cell)
cell - The Excel cellpublic java.text.Format getDefaultFormat(Cell cell)
cell - The cellpublic java.lang.String formatRawCellContents(double value,
                                              int formatIndex,
                                              java.lang.String formatString)
formatCellValue(Cell)public java.lang.String formatRawCellContents(double value,
                                              int formatIndex,
                                              java.lang.String formatString,
                                              boolean use1904Windowing)
formatCellValue(Cell)public java.lang.String formatCellValue(Cell cell)
Returns the formatted value of a cell as a String regardless of the cell type. If the Excel format pattern cannot be parsed then the cell value will be formatted using a default format.
When passed a null or blank cell, this method will return an empty String (""). Formulas in formula type cells will not be evaluated.
cell - The cellpublic java.lang.String formatCellValue(Cell cell, FormulaEvaluator evaluator)
Returns the formatted value of a cell as a String regardless of the cell type. If the Excel number format pattern cannot be parsed then the cell value will be formatted using a default format.
When passed a null or blank cell, this method will return an empty
 String (""). Formula cells will be evaluated using the given
 FormulaEvaluator if the evaluator is non-null. If the
 evaluator is null, then the formula String will be returned. The caller
 is responsible for setting the currentRow on the evaluator
cell - The cell (can be null)evaluator - The FormulaEvaluator (can be null)public java.lang.String formatCellValue(Cell cell, FormulaEvaluator evaluator, ConditionalFormattingEvaluator cfEvaluator)
Returns the formatted value of a cell as a String regardless of the cell type. If the Excel number format pattern cannot be parsed then the cell value will be formatted using a default format.
When passed a null or blank cell, this method will return an empty
 String (""). Formula cells will be evaluated using the given
 FormulaEvaluator if the evaluator is non-null. If the
 evaluator is null, then the formula String will be returned. The caller
 is responsible for setting the currentRow on the evaluator
When a ConditionalFormattingEvaluator is present, it is checked first to see if there is a number format to apply. If multiple rules apply, the last one is used. If no ConditionalFormattingEvaluator is present, no rules apply, or the applied rules do not define a format, the cell's style format is used.
The two evaluators should be from the same context, to avoid inconsistencies in cached values.
cell - The cell (can be null)evaluator - The FormulaEvaluator (can be null)cfEvaluator - ConditionalFormattingEvaluator (can be null)public void setDefaultNumberFormat(java.text.Format format)
Sets a default number format to be used when the Excel format cannot be parsed successfully. Note: This is a fall back for when an error occurs while parsing an Excel number format pattern. This will not affect cells with the General format.
 The value that will be passed to the Format's format method (specified
 by java.text.Format#format) will be a double value from a
 numeric cell. Therefore the code in the format method should expect a
 Number value.
 
format - A Format instance to be used as a defaultFormat.format(java.lang.Object)public void addFormat(java.lang.String excelFormatStr,
                      java.text.Format format)
 The value that will be passed to the Format's format method (specified
 by java.text.Format#format) will be a double value from a
 numeric cell. Therefore the code in the format method should expect a
 Number value.
 
excelFormatStr - The data format stringformat - A Format instancepublic static void setExcelStyleRoundingMode(java.text.DecimalFormat format)
public static void setExcelStyleRoundingMode(java.text.DecimalFormat format,
                                             java.math.RoundingMode roundingMode)
format - DecimalFormatroundingMode - RoundingModepublic java.beans.PropertyChangeSupport getLocaleChangedObservable()
LocaleUtil.setUserLocale(Locale) the stored
 formats need to be refreshed. All formats which aren't originated from DataFormatter
 itself, i.e. all Formats added via addFormat(String, Format) and
 setDefaultNumberFormat(Format), need to be added again.
 To notify callers, the returned PropertyChangeSupport should be used.
 The Locale in updateLocale(Locale) is the new Locale.public void updateLocale(java.util.Locale newLocale)
newLocale - the new localeCopyright 2021 The Apache Software Foundation or its licensors, as applicable.