This repo contains the powerful engine that performs all the features and actions expected of a functional spreadsheet.
The application is logically separated into two parts.
Each and every spreadsheet is represented by a single SpreadsheetMetadata
object instance.
A wide variety of items are stored for each spreadsheet including but not limited to:
Each item is allocated a unique SpreadsheetMetadataPropertyName.
Changes to any of these properties will force a recalculation and formatting of every cell in the spreadsheet.
Spreadsheet identifier/name
Audit metadata such as the creator/last modified users and timestamps.
Locale
Locale
symbols used when formatting numbers and dates.Date
Numbers
Formatter Some default format pattern(s) for each of the spreadsheet value types. Note cells can have their own format pattern assigned which will be used instead.
General
format pattern is selected.Parser
Viewport These properties control the spreadsheet grid view.
There are many internal components that contribute to the core functionality of a spreadsheet. Eventually each of these will be a plugin where users can contribute an alternative or supplementary choice.
These Converters
along with a few others belonging to other repos are used to convert values from one type to another.
errorThrowing
errorToNumber
errorToString
general
parser
selectionToSelection
spreadsheetCellTo
stringToDate
stringToDateTime
stringToExpressionNumber
stringToFormatPattern
stringToSelection
unformattedNumber
Converter(s) are part of many core features, some are listed below and the more will be created.
SpreadsheetCell
and then PASTING only
the TextStyle
(style) to a new target.All sorting is performed by using a selected SpreadsheetComparator
, which is identical to a java.util.Comparator
but also includes a type
property of java.lang.Class
. The type
property is used to convert each value prior to the
actual comparison.
This supports advanced features such as sorting a range of cells with
It is thus possible to sort a column(s) in the following possible ways
day-of-month
then month-of-year
then year
seconds-of-minute
then minute-of-day
then hour-of-day
When sorting a cell-range/column/rows it is possible to sort each column/row with different SpreadsheetComparator(s)
.
SpreadsheetComparator(s)
may be provided via a
custom SpreadsheetComparatorProvider
DONEFunctions within a formula expressions are defined by individual ExpressionFunction
.
Currently there are about 100+ functions available and these are listed HERE.
ExpressionFunction(s)
may be provided via a
custom ExpressionFunctionProvider
DONEA SpreadsheetFormatter
is used to format the cell value into text that is displayed within the grid of cells.
There are several built-in SpreadsheetFormatter(s) one for each Spreadsheet type, each supporting the standard patterns to allow user customisation of that value type along with a single color.
- dd/mm/yyyy date
dd/mm/yyyy hh:mm: ss date-time
General General
$0.00 number
@ text
hh:mm: ss time
Additional SpreadsheetFormatter(s)
may be provided via a
custom SpreadsheetFormatterProvider
DONE
Uploaded plugins TODO
SpreadsheetEngine integration (Currently only patterns are used refactoring work needs to be done) TODO
TODO Mention here TODO Dynamic plugin support