How to replace every formula in an excel workbook with its calculated value
- Step 1Recalculate your workbook first — Open the file in Excel and press F9 (or Formulas → Calculate Now). The tool reads each formula's cached result, not a live recalculation — so any cell that was never calculated, or was last saved with calculation set to Manual, has no cached value and will convert to blank. A fresh recalc-and-save guarantees every result is current.
- Step 2Work from a copy, not your master — Conversion is one-way — once a cell holds a static value the formula is gone. Keep your live-formula workbook as the master and feed a duplicate to the tool. The tool itself never modifies your input (it writes a new
-values-only.xlsx), but keeping a clean master is good hygiene for any irreversible step. - Step 3Drop the .xlsx onto the tool — Upload the
.xlsx(or.xlsm) you want flattened. ExcelJS loads it locally withwb.xlsx.load(); nothing is transmitted. Free tier allows files up to 5 MB / 10,000 rows / 1 file; Pro raises this to 50 MB / 100,000 rows. This tool requires the Pro tier to run. - Step 4Run the conversion — The tool iterates
sheet.eachRow → row.eachCellacross every worksheet. A cell counts as a formula when its value is an object containing aformulakey; that cell is rewritten tofv.result ?? null. There are no options to set — it is all-sheets, all-cells, every time. - Step 5Check the change count — The result panel shows
N change(s) · <ms>—Nis the number of formula cells converted. (Row in/out counters are not tracked for this tool, so they read zero.) IfNis far lower than you expected, your file may have been saved with stale or empty caches — re-do step 1. - Step 6Download and verify in Excel — Download
yourfile-values-only.xlsx, open it, and click into a previously-formula cell. The formula bar now shows a literal number or string, not=.... Spot-check a totals row to confirm the cached values match what the live model showed before conversion.
What the tool changes vs. what it leaves alone
The conversion touches only one thing: the value of cells that currently hold a formula. Everything else in the cell and the workbook is written back by ExcelJS as-is on the round-trip.
| Workbook element | Behaviour | Why |
|---|---|---|
Formula cell (=SUM(...), =IF(...), =VLOOKUP(...)) | Converted — cell becomes the cached result; formula string discarded | The cell value is an object with a formula key; tool sets cell.value = fv.result ?? null |
| Constant cell (typed number / text) | Preserved — never touched | It has no formula key, so the formula-detection branch skips it |
| Formula with empty cache (never calculated) | Converted to blank, not zero | fv.result is undefined, so ?? null writes null (an empty cell) |
| Formula whose cached result is an Excel error | Converted — the cell keeps the cached #REF! / #DIV/0! / #N/A value | The error is the cached result, so it is written verbatim |
| Number formatting, fonts, fills, borders | Preserved on round-trip | Only cell.value is reassigned; style objects are left intact |
| Empty rows / empty cells | Skipped | Iteration uses { includeEmpty: false }, so blanks are never visited |
Tier limits for this tool (excel family)
Real per-tier limits from the platform. This tool is Pro-gated, so Free users must upgrade; the row/file numbers below govern how large a workbook you can process.
| Tier | Max file size | Max rows | Files per run | Can run this tool? |
|---|---|---|---|---|
| Free | 5 MB | 10,000 | 1 | No — requires Pro |
| Pro | 50 MB | 100,000 | 5 | Yes |
| Pro-media | 200 MB | 500,000 | 20 | Yes |
| Developer | 500 MB | Unlimited | Unlimited | Yes |
Cookbook
Before/after snapshots of what the formula bar shows once a cell is flattened. The left side is the source workbook (live formula); the right side is -values-only.xlsx.
A simple SUM total flattened
The most common case: a totals cell driven by a SUM. After conversion the displayed number is identical but the formula is gone, so a recipient cannot see which range fed the total.
Before (cell B10 selected): Formula bar: =SUM(B2:B9) Cell shows: 48,200 After conversion (B10 selected in -values-only.xlsx): Formula bar: 48200 Cell shows: 48,200 (number format preserved)
Nested IF / VLOOKUP logic removed
Pricing and grading logic often lives in nested IFs and lookups. Flattening leaves the answer but hides the decision tree — the whole point of sharing a result without the methodology.
Before (cell D4): =IF(C4>1000,VLOOKUP(C4,Tiers!A:C,3,0),C4*0.9) Cell shows: 870.00 After (cell D4): 870 Cell shows: 870.00
Stale cache converts to the wrong number
If you edited inputs with Calculation set to Manual and never pressed F9, the cache still holds the OLD result. The tool writes that stale cached value. The fix is always to recalculate before converting.
Input edited from 100 → 200, but F9 never pressed: =A1*2 A1 now = 200 Cached result still: 200 (from when A1 was 100) After conversion: 200 <-- WRONG (should be 400) Fix: press F9 in Excel, save, THEN convert.
Empty-cache formula becomes a blank cell
A force-recalc workbook (or one saved by a non-Excel writer that did not store results) has no cached value. The tool writes null, so the cell ends up empty rather than showing 0.
Source cell with no cached result: Formula bar: =NETWORKDAYS(StartDate,EndDate) Cached result: (none) After conversion: (blank cell — nothing in the formula bar) Fix: open + recalc + save in Excel so a result is cached.
Verifying the change count after a multi-sheet run
On a workbook with several tabs, use the reported change count as a sanity check that no tab was missed and the caches were populated.
Workbook: Model.xlsx — 4 sheets (Inputs, Calc, Summary, Charts) Upload → run Result panel: 847 change(s) · 612ms 847 ~= the formula-cell count you expected across all 4 sheets. Far fewer would suggest stale/empty caches — recalc and retry.
Edge cases and what actually happens
Cached result is empty (never-calculated workbook)
By designWhen a formula has no stored result the tool writes fv.result ?? null, which evaluates to null — an empty cell, not 0 or blank-string. This happens with files saved under Manual calculation, files written by non-Excel libraries, or formulas added but never recalculated. Always open the file in Excel, press F9, and save before converting so every formula has a fresh cached result.
Cached value is stale after Manual-calc edits
Stale value riskThe tool reads the value Excel last cached — it does not recalculate. If you changed inputs with Calculation set to Manual and never pressed F9, the cache (and therefore the converted value) is out of date. There is no warning; the wrong number is written silently. Recalculate (F9) and save before uploading.
Formula already evaluates to a #REF! / #DIV/0! / #N/A error
Error preservedIf the cached result is an Excel error, that error is the value written into the static cell. Conversion does not 'repair' errors — it freezes them. Fix the underlying formula (or trace it with the Error Locator) before flattening, or you will ship a workbook with hard-coded #REF! text.
Array / dynamic-array (spill) formulas
ConvertedSpill and array formulas are stored as formula cells, so they are converted to their cached results too. ExcelJS exposes the cached result of the cell it visits; if a spill range's child cells were stored as separate cached values they are written individually, but complex spill metadata is not reconstructed. Verify spill outputs (FILTER, SORT, UNIQUE) in Excel after conversion.
Charts that reference former formula cells
Values retainedA chart bound to cell B10 reads whatever value B10 holds; after conversion B10 holds the static number, so the chart still plots the same point. Note ExcelJS round-trips workbooks and does not regenerate charts — for very chart-heavy or feature-rich workbooks, open the output once in Excel to confirm visual elements survived the save.
Conditional formatting and data validation
Not modifiedThe tool only reassigns cell.value for formula cells; it never edits conditional-formatting rules or data-validation lists, which ExcelJS writes back on the round-trip. Rules that *reference* a former formula cell now evaluate against the static value. As with any ExcelJS save, exotic CF/DV features should be spot-checked in the output.
Power Query / Get & Transform connections
Out of scopePower Query queries are not cell formulas — they live in the workbook's connection/query parts, which this tool does not touch. Flattening cell formulas will not freeze a Power Query refresh. To make a Query-driven file self-contained, load the query result to a sheet, then run this tool on the resulting value cells, or break the connection in Excel via Data → Queries & Connections.
.xls (legacy binary) upload
Invalid formatThis tool accepts .xlsx (and .xlsm). The legacy binary .xls format is not supported by the ExcelJS load path here. Re-save the file as .xlsx in Excel (File → Save As → Excel Workbook) before uploading.
File exceeds your tier's size or row limit
RejectedThe excel family caps at 5 MB / 10,000 rows on Free, 50 MB / 100,000 on Pro, 200 MB / 500,000 on Pro-media, and 500 MB / unlimited on Developer. A workbook over your limit is rejected before processing. This tool also requires at least the Pro tier to run at all.
Empty rows and empty cells
SkippedIteration uses { includeEmpty: false }, so genuinely empty rows and cells are never visited and never altered. Only populated formula cells contribute to the reported change count.
Frequently asked questions
What value is used if a formula has never been calculated?
The tool reads the formula's cached result (fv.result). If that cache is empty — common in force-recalc or Manual-calculation workbooks — the cell is set to blank (null), not 0. Open the file in Excel, press F9 to recalculate, and save before converting so every formula has a current cached value.
Does it recalculate my formulas?
No. It is a freeze, not a recompute. It writes whatever value Excel last stored for each formula. That is why recalculating (F9) and saving before upload matters — the tool trusts the cached result and cannot detect that it is stale.
Can I convert only one sheet, or only selected cells?
No — there are no options. The tool processes every worksheet and every populated formula cell in a single pass. If you need partial control, do Paste Special → Values on just the cells you want in Excel, then upload to confirm nothing else changed.
Will my original file be modified?
No. The tool reads your upload and writes a separate new workbook named yourfile-values-only.xlsx. Your source file on disk is untouched. Still, keep your live-formula master separately, because the conversion itself is irreversible in the output copy.
Is the conversion reversible?
Not within the output file — once a formula is replaced by its value the original =... string is gone. Always keep the formula version as your master and share only the -values-only.xlsx.
Does it handle array and dynamic-array (spill) formulas?
Yes — they are formula cells, so they are converted to their cached results. Reconstruction of full spill-range metadata is not guaranteed, so verify FILTER / SORT / UNIQUE / SEQUENCE outputs in Excel after conversion.
What happens to formulas that already show an error?
The cached error (#REF!, #DIV/0!, #N/A, etc.) becomes the static value of the cell. Conversion does not fix errors — it freezes them. Trace and fix them first; the Error Locator and Formula Explainer help.
Does it work on .xlsm (macro-enabled) files?
It accepts .xlsm and converts the formula cells. It does not strip the VBA project — the macros remain. To remove macros, run the output through the VBA Macro Stripper.
Are number formats, fonts, and fills kept?
Yes. The tool only reassigns the value of formula cells; cell styling is written back by ExcelJS unchanged on the round-trip. A cell formatted as currency still displays as currency after its formula is flattened.
Does my file get uploaded anywhere?
No. Processing is 100% browser-side with ExcelJS — wb.xlsx.load() runs locally and the workbook never touches a server. This is what makes it safe for NDA-bound financial models and PII-bearing sheets.
How big a workbook can I process?
Free 5 MB / 10,000 rows (but Free cannot run this Pro tool), Pro 50 MB / 100,000 rows, Pro-media 200 MB / 500,000 rows, Developer 500 MB / unlimited. A file over your tier limit is rejected before processing.
What does the change count mean?
It is the number of formula cells the tool converted (change(s) in the result panel). Row-in/row-out counters are not tracked for this tool, so they read zero. A change count far below your expectation usually signals stale or empty caches — recalculate and re-run.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.