This is the default data model for a cell. It contains everything related to the cell value, formatting and data validation.
export type CellData = {
/**
* The value the user entered in the cell. e.g, 1234 , 'Hello' , or =NOW() Note: Dates, Times and DateTimes are represented as doubles in serial number format.
* errorValue: Captures data validation errors
*/
userEnteredValue?: ExtendedValue;
/**
* The effective value of the cell. For cells with formulas, this is the calculated value. For cells with literals, this is the same as the userEnteredValue. This field is read-only.
*
* errorValue: Capture errors from formula calculation
*/
effectiveValue?: ExtendedValue;
/**
* The formatted value of the cell. This is the value as it's shown to the user. This field is read-only.
*/
formattedValue?: string;
/**
* Text format runs
*/
textFormatRuns?: TextFormatRun[];
/**
* Hyperlink URL
*/
hyperlink?: string;
/**
* Validation applied to a cell
*/
dataValidation?: DataValidationRule;
/**
* Image url
*/
imageUrl?: string;
/**
* Cell meta style
*/
metaType?: "people";
/**
* The format the user entered for the cell. When writing, the new format will be merged with the existing format.
*/
userEnteredFormat?: CellFormat;
/**
* The effective format being used by the cell. This includes the results of applying any conditional formatting and, if the cell contains a formula, the computed number format. If the effective format is the default format, effective format will not be written. This field is read-only.
*/
effectiveFormat?: CellFormat;
};
You can define your own CellData which extends from the source.
CellData is the source of truth of a cell. Spreadsheet does not mutate cellData. Cells are rendered based on properties of a cell
effectiveValue and userEnteredValue
Effective value is derived based on the value entered by user.
ie: If user enters "1000" in a cell, Spreadsheet detects the type of the value and classifies it as numberValue
If user enters `=SUM(4,4), effectiveValue is set when we get the results back from calculator, which is a numberValue in this case.
Internally effectiveValue is used for calculations and userEnteredValue is used for cell editing
effectiveFormat and userEnteredFormat
effectiveFormat is derived from userEnteredFormat. All user modified changes to a cell format is stored in userEnteredFormat and it is subsequently merged with effectiveFormat. CanvasGrid reads only effectiveFormat to display a cell.
Using your own CellData object
CanvasGrid accepts your own custom CellData object which extends from the core CellData