Inspect the original synthetic worksheet cells and compare a stored formula result with independent arithmetic. A missing stored result stays unavailable; the page does not claim to run a legacy Angular parser.

Compare identical displays with different content
Use a worksheet named Fixture. Start with two authored cell-object cases:
| Address | Type t |
Underlying value v |
Format z |
Intended displayed text |
|---|---|---|---|---|
| A1 | s |
Text "007" |
Not specified | 007 |
| B1 | n |
Number 7 |
"000" |
007 |
A1 preserves leading zeros as part of a string. B1 uses presentation to show a numeric value with three digits. If you convert A1 to a number without a declared rule, you change the meaning of its content. If you treat B1's displayed text as its stored value, you confuse formatting with content.
SheetJS documents t as type, v as underlying value, z as number format when requested, w as formatted text when applicable, and f as formula. Its cell-object guide explains that separation. In the authored B1 case, w is "007"; in a later parsed workbook, inspect which properties the selected options actually expose. Do not fill an absent property with a guessed value.
Keep the sheet name and address beside every property. A flat preview of strings cannot tell a reviewer whether 007 came from Fixture!A1 or Fixture!B1. The acceptance task is to retain those identities and distinguish the values even when their presentation is identical.
Separate formula text from a stored result
Add this independent arithmetic fixture:
| Address | content |
|---|---|
| A2 | Number 2 |
| B2 | Number 3 |
| C2 | Formula f: "A2+B2", numeric stored result v: 5 |
The original expectation is 2 + 3 = 5. Now propose a changed cell-object case: B2 becomes 4 while C2 retains its stored result 5. The independent arithmetic expectation is 6. Label these separately: Stored result: 5 and Expected sum for the supplied inputs: 6.
Reading the stored 5 is not evidence that a new calculation occurred. SheetJS Community Edition explicitly says it does not automatically compute formula results. Its formula documentation also distinguishes formula strings from values. The authored f string omits the leading equals sign used in a spreadsheet formula display.
Use one more case: C2 has f: "A2+B2" but no v. The result is unavailable, not zero and not an automatically computed 6. The inspector should report the missing stored result. Do not evaluate arbitrary workbook formulas to make the field look complete.
These cell-object cases do not establish that every XLSX writer or application preserves a deliberately stale stored result. A later real workbook needs its own authoring, serialization, reading, and property checks. Record actual parsed values after that round trip instead of assuming they match the object specification.
Trace the file-reading stages
For browser input, SheetJS documents reading a selected File's bytes into an ArrayBuffer and passing them to XLSX.read. Its input guide also shows a FileReader route. Those are generic browser paths, not tested Angular 8 code for your project. See the official input guide.
Prepare separate checkpoints: selected file identity, bytes read, workbook parsed, worksheet found, cell found, and properties inspected. Local selection and parsing do not mean a server upload occurred. If a later application sends the file anywhere, record that as a separate action and inspect it separately.
Pin the actual Angular version, SheetJS package/version, parser options, event handling, and browser target before implementation. Do not paste a current framework example and describe it as working Angular 8 code. A working StackBlitz link also needs an actual project and runtime check; none is provided here.
Hold stale and unsupported results
In a later reader, a new selection or Reset should retire the prior read's callbacks and displayed workbook state. A delayed result from File A must not appear as File B's result. Include a selection identity in the acceptance plan and check it before publishing either success or error state.
Try the worked example
Inspect the original 2+3 case, then change B2 to 4 while leaving stored C2 at 5. The mismatch is expected 6 versus stored 5. Clear stored C2 to see unavailable rather than automatic 0 or 6. Preserve the address beside every property. Reading a formula cache is not recalculation.
The page inspects authored cell objects and one independent arithmetic expression. It does not parse XLSX, run Angular 8/StackBlitz, upload files, or recalculate arbitrary formulas.
Recreate this example
Build one complete self-contained HTML page for this task: inspect supplied cell-object properties and distinguish a stored formula cache from an independently expected sum.
Use these exact original practice data and worked expectations: Fixture!A1 has {t:"s", v:"007"}. Fixture!B1 has {t:"n", v:7, z:"000", w:"007"}. A2 = 2 and B2 = 3; C2 has {f:"A2+B2", v:5}. Change B2 to 4 while retaining cached result 5: expected sum 6, stored value 5. Remove v to show unavailable.
Implement the following useful local interactions: Show A1/B1 type/value/display records, editable numeric B2 and optional numeric stored C2, Inspect. Calculate only the declared independent 2+B2 expectation; never evaluate arbitrary formulas or claim parser recalculation. Blank cache unavailable, invalid numeric held. Preserve the supplied source text and distinguish an uncomputed state, a successful local result, and an invalid or incomplete input. Update output only from the current input snapshot. An input edit must retire stale feedback until the reader runs the relevant action again. Do not silently invent missing values or replace a failing case with a success.
Design the page as a compact source-and-result developer workbench with readable code, labeled inputs, and a separate explanation area. Put a compact task heading, actual sample data, the main result, and usable controls early enough to be useful on a narrow screen. Use readable text of at least 16px, generous paragraph spacing, strong contrast, native labels, accessible buttons, and visible keyboard focus. Stack long records at 360px and wrap code without page-level horizontal overflow.
Use type=button and explicit querySelector-based click handlers rather than relying on form submission. If Enter is useful, handle it only on the relevant input and ignore isComposing. Keep effects within this open page; no remote dependencies, network calls, persistence, fake downloads, or automated sending. The page inspects authored cell objects and one independent arithmetic expression. It does not parse XLSX, run Angular 8/StackBlitz, upload files, or recalculate arbitrary formulas. Place worked explanations beside their data and identify teacher or synthetic examples clearly. Output only the complete HTML document, with inline styles and script and LF line endings.
Review the cell-object and formula-cache inspector in NOS
Record actual parsed properties after a native workbook round trip in your pinned environment. Review Fixture!A1 and Fixture!B1 beside the stored-5/expected-6 case in NOS, and revise eligible static cache explanations in visual editing mode before checking the parsed workbook.