VisiMark logo

Articles

on the numbers in your Markdown

Home Try in Playground Read the tutorial Continuous integration MCP server Articles

10 things Excel cannot do but VisiMark can

By Michał Niedźwiedzki · Excel, Markdown, Git, CI

An .xlsx is a zip of XML. A VisiMark document is a Markdown file. What follows is what that difference does.

1. Show the formulas in the pull request

The rules sit in the file as text:

Net = Qty * Rate
VAT precision 2 = Net * vat

GitHub renders the tables. The diff of a quantity change is one line:

-| On-call support            | hour  |  12 |  260.00 |  3120.00 |  717.60 |  3837.60 |
+| On-call support            | hour  |  20 |  260.00 |  3120.00 |  717.60 |  3837.60 |

An .xlsx diff is not that line. The formulas are not that source.

2. Fail CI when the stored numbers disagree with the rules

Same invoice, quantity 12 changed to 20, derived cells left alone. The Markdown still renders. check does not:

$ visimark check docs/example-invoice-drift.md
  STALE   lines.Net       · On-call support         3120.00 ≠ 5200.00    Qty * Rate
  STALE   lines.VAT       · On-call support          717.60 ≠ 1196.00    Net * vat
  STALE   lines.Gross     · On-call support         3837.60 ≠ 6396.00    Net + VAT
  ...
  27 problems (22 stale, 5 errors)
$ echo $?
1

Excel recalculates when you open the workbook. This is a command on the file in git, without Excel, while the file remains the document.

3. Bind a number in a sentence to a formula

Net of tax the engagement comes to **23300.00**<!--vmark=lines.net_total--> PLN.

The HTML comment is invisible on GitHub, in VS Code preview, and in pandoc. check still compares the bold number to SUM(Net). Excel has no equivalent that survives as ordinary Markdown.

4. Refuse a date that could be two dates

$ visimark check date.md
  DATE    t.Start         · 11/12/2026            "11/12/2026"
          Dates must be ISO 8601 calendar dates: YYYY-MM-DD.
          Ambiguous: 2026-12-11 or 2026-11-12, 29 days apart. Fix by hand.

Excel picks one, from locale. 2026-12-11 checks clean. 11/12/2026 does not.

5. Keep the clock out of the file

$ visimark check today.md
  TYPE    s.x               unknown function `TODAY`

There is no TODAY(), no NOW(), no locale, no plugin slot. Two checkouts of the same commit get the same numbers. Excel's TODAY() is the opposite of that.

6. Derive the rule from the table you already wrote

$ visimark infer prices.md
  column rules
    Net    = Price * Qty                      3/3 rows

1 rule, 0 aliases, 0 scalars, 0 anchors.

infer --write inserts the block. It only proposes a rule that reproduces every row exactly.

7. State an invariant in the same file

assert variance == 0

On the clean invoice, visimark eval --get recon.variance prints 0 and exits 0. If the schedule stops adding up, check reports ASSERT and exits 1. The claim lives next to the numbers.

8. Ask a what-if without writing the document

param budget precision 2 = default 2.00 is the cap in example-agent-budget.md. A scenario is an argument to eval, not an edit:

$ visimark eval --scenario tight.json docs/example-agent-budget.md
  ASSERT  #calls   spent <= rates.budget
          0.4266 <= 0.40   is false under scenario (holds on defaults)
$ echo $?
1

The Markdown is byte-identical afterwards. check and fmt refuse --scenario.

9. Pin a local CSV to a hash in the document

```vmark #lines from example-invoice-csv-import.csv labelled Item, Unit, Qty, Rate, Net, VAT, Gross at sha256:e6667fb8dda6801721d885c259e2456a9e6c92f1ec89af7f14330e0c54c6ac14

Change a byte of the CSV:

$ visimark check example-invoice-csv-import.md
  STALE   lines.            `example-invoice-csv-import.csv` does not match its recorded stamp
          expected sha256:e6667fb8dda6801721d885c259e2456a9e6c92f1ec89af7f14330e0c54c6ac14,
          got sha256:06824485a65f0142617c34c951f772d22e91a556bbe3f0c2f95e19da44115143

Excel can import CSV. It does not carry the digest in the document as the condition check enforces.

10. Commit the chart as a file, and check the bytes

docs/example-charts.md declares chart performance as bar of Revenue, Cost, Profit labelled Month. fmt writes charts/example-charts-sales.svg. check renders again and compares bytes. The image is an ordinary committed file. Excel's chart lives inside the workbook.

The workbook calculates. The Markdown file is the document in git.

Disclosure

I wrote this article with AI. VisiMark is a MIT-licensed project with no business model or sales team behind it.

More to read