DEV Community

Cover image for 10 things Excel cannot do but VisiMark can
Michał Niedźwiedzki
Michał Niedźwiedzki

Posted on Originally published at visimark.dev AI-assisted

10 things Excel cannot do but VisiMark can

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
Enter fullscreen mode Exit fullscreen mode

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 |
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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`
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.

The Playground runs the tool in your browser with nothing to install. The repository and the project site have the rest.

Top comments (0)