Thanks much for your help on this problem. I've never done anything with ledger-cli yet and wasn't aware such a package existed.
Jude <jdashiel at panix dot com> "There are four boxes to be used in defense of liberty: soap, ballot, jury, and ammo. Please use in that order." -Ed Howdershelt (Author, 1940) . On Sun, 5 Feb 2023, Dr. Arne Babenhauserheide wrote: > > Jude DaShiell <jdash...@panix.com> writes: > > > This is a running balance table and I don't know what kind of a #TBLFMT > > line would be useful for that either. > > > > | date | transaction | amount | fee | balance | > > |--------------+------------------+--------+-------+---------| > > | [2023-01-11] | original balance | +0.00 | +0.00 | +423.17 | > > | [2023-01-12] | dunkin | -18.68 | -1.00 | 403.49 | > > | [2023-01-13] | WalMart | -28.68 | -1.00 | 384.88 | > > | [2023-01-16] | Deposit | + | | 634.88 | > > | [2023-01-17] | Capris | - | - | 615.34 | > > | [2023-01-17] | Mcdonalds | -4.74 | -1.00 | 609.60 | > > | [2023-01-18] | verizon | - | - | 543.35 | > > | [2023-01-26] | dunkin | - | - | 542.37 | > > | [2023-02-01] | damgoodcafe | -13.28 | -1.00 | 528.09 | > > | | | | | | > > One thing I could see as useful is a check column to enusre that > > balance - amount - fee actually gives the previous balance: > > | date | transaction | amount | fee | balance | check | > |--------------+------------------+--------+-------+---------+--------| > | [2023-01-11] | original balance | +0.00 | +0.00 | +423.17 | 423.17 | > | [2023-01-12] | dunkin | -18.68 | -1.00 | 403.49 | 423.17 | > | [2023-01-13] | WalMart | -28.68 | -1.00 | 384.88 | 414.56 | > | [2023-01-16] | Deposit | + | | 634.88 | 634.88 | > | [2023-01-17] | Capris | - | - | 615.34 | 615.34 | > | [2023-01-17] | Mcdonalds | -4.74 | -1.00 | 609.60 | 615.34 | > | [2023-01-18] | verizon | - | - | 543.35 | 543.35 | > | [2023-01-26] | dunkin | - | - | 542.37 | 542.37 | > | [2023-02-01] | damgoodcafe | -13.28 | -1.00 | 528.09 | 542.37 | > | | | | | | 0 | > #+TBLFM: $6='(- $5 $4 $3);N > > As you can see, The balance after WalMart does not add up, so I think > this could be a good check to have. > > > Suggestions for any other improvements I could make on this table will be > > appreciated and implemented if possible. > > I use ledger-cli for such tables which can generate suitable output. > > https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-ledger.html > https://www.ledger-cli.org/3.0/doc/ledger3.html#Org-mode-with-Babel > > You could do some clever stuff like > > #+name: ledger-to-table > #+begin_src elisp :var data="" > (concat "#+name: ledger-results\n" > data > "#+tblfm: \n")) > #+end_src > > #+begin_src ledger :results raw :post ledger-to-table(*this*) :cmdline > --register-format "| %(format_date(date)) | %(payee) | %(display_account) | > %(display_amount) | %(display_total) | \n" reg -M --wide --date-format > %y-%m-%d > 2022-06-15 * py2guile > ArneBab:Assets:Autorenhonorar:epubli 3.13? > ArneBab:Income:sale:nonrpg:epubli > #+end_src > > > > #+begin_src elisp :exports results > (org-babel-do-load-languages > 'org-babel-load-languages > '((ledger . t) ;this is the important one for this tutorial > )) > nil > #+end_src > > #+RESULTS: > > If you use ledger-cli for accounting, you can do pretty clever > post-processing inside org-mode. Here?s an example that uses > [[https://www.ledger-cli.org/3.0/doc/ledger3.html#Output-customization][--register-format]] > to provide the register results directly as an > org-mode table: > > #+begin_src org > ,#+name: ledger-to-table > ,#+begin_src elisp :var data="" > (concat "#+name: ledger-results\n" > data > "#+tblfm: \n")) > ,#+end_src > > ,#+begin_src ledger :results raw :post ledger-to-table(*this*) :cmdline > --register-format "| %(format_date(date)) | %(payee) | %(display_account) | > %(display_amount) | %(display_total) | \n" reg -D --wide --date-format > %Y-%m-%d > 2022-06-15 * py2guile > ArneBab:Assets:Autorenhonorar:epubli 3.13? > ArneBab:Income:sale:nonrpg:epubli > ,#+end_src > > #+end_src > > This results in output like this (evaluated live on every export of this > website): > > #+name: ledger-to-table > #+begin_src elisp :var data="" > (concat "#+name: ledger-results\n" > data > "#+tblfm: \n")) > #+end_src > > #+begin_src ledger :results raw :post ledger-to-table(*this*) :cmdline > --register-format "| %(format_date(date)) | %(payee) | %(display_account) | > %(display_amount) | %(display_total) | \n" reg -D --wide --date-format > %Y-%m-%d > 2022-06-15 * py2guile > ArneBab:Assets:Autorenhonorar:epubli 3.13? > ArneBab:Income:sale:nonrpg:epubli > #+end_src > > #+RESULTS: > #+name: ledger-results > | 2022-06-15 | - 2022-06-15 | ArneBab:Assets:Autorenhonorar:epubli | 3.13? | > 3.13? | > | 2022-06-15 | - 2022-06-15 | ArneBab:Income:sale:nonrpg:epubli | -3.13? | > 0.00? | > #+tblfm: > > > Also see > > - https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-ledger.html > - https://www.ledger-cli.org/3.0/doc/ledger3.html#Org-mode-with-Babel > > > > > Best wishes, > Arne >