Skip to content

Return formula result datatype #31

@LesterLyu

Description

@LesterLyu

Why?

People need to know the format of the formula result to visulize the result.

Example 1:

DATE(2000, 1, 1) results in

  • 36526 in General format
  • 1/1/2000 in Date format.
    Internally, the value is being stored as a number 36526 (or so-called excel serial number), but there is a way to store and propagate the type of the value when evaluating the formula DATE(2000, 1, 1). Thus, we can tell users that the result is a Date.

Example 2:

DATE(CONCAT(200, 0), 1, 1) returns a date value/ serial number.
CONCAT(200, 0) always return a string (or error), DATE(CONCAT(200, 0), 1, 1) always return a date (or error).

Example 3:

CONCATE(DATE(2000, 1, 1)) returns a string.

Questions

Do we need to propagate the type internally?

It is unnecessary. We only need to know the out-most function name, since the out-most function determines the result type.

How many types are there?

So far, I discovered only Date and General. General can be JavaScript Number, String, Boolean.

How about some formulas returning a cell reference, range reference, array? Should we tell the user what we returning?

How about a simple reference =A1, where A1 has a formula type Date?

We should know the type of the given cell, but how?

Should we provide a format function in the result wrapper, which is basically SSF.format but only takes a format string?

Do we use a pure JS object to wrap the formula result, or a class?

class may use more memory. Generating more unnecessary data → Invoke Garbage Collector more frequently.

More questions?

Proposing

Currently I don't have a clear idea of the implementation, we must think of all the questions above carefully.

Instead of returning the value directly, we return an object that wraps the result and add information about the type, e.g., Date, or Excel Serial Number.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions