org table as a spreadsheet

下面的表格.

|----------+-------------+------------------------------+------+------+--------+-----------|
| 复式记账 | 类别        | 条目                         | 单价 | 数量 | 总金额 | 备注      |
|----------+-------------+------------------------------+------+------+--------+-----------|
| Expenses | Foods.Meals | Breakfast:豆腐脑+油饼+小咸菜 |   10 |    1 |     10 | @六九豆浆 |
| Expenses | Foods.Meals | Lunch:                       |      |      |        |           |
| Expenses | Foods.Meals | Dinner:                      |      |      |        |           |
|----------+-------------+------------------------------+------+------+--------+-----------|
| ExTotal  |             |                              |      |      |     10 |           |
|----------+-------------+------------------------------+------+------+--------+-----------|
| Incomes  |             |                              |      |      |        |           |
|----------+-------------+------------------------------+------+------+--------+-----------|
| InTotal  |             |                              |      |      |        |           |
|----------+-------------+------------------------------+------+------+--------+-----------|
| AllTotal |             |                              |      |      |        |           |
|----------+-------------+------------------------------+------+------+--------+-----------|
#+TBLFM: $6=$4*$5::@6$6=vsum(@2..@4)

当合计ExpenseTotal的时候使用公式@6$6=vsum(@2..@4), @4这一项fixed.

当Scale Expenses, 比如双12增加新的开支:

Expenses:方便面
Expenses:辣条

|----------+-----------------+------------------------------+------+------+--------+-----------|
| 复式记账 | 类别            | 条目                         | 单价 | 数量 | 总金额 | 备注      |
|----------+-----------------+------------------------------+------+------+--------+-----------|
| Expenses | Foods.Meals     | Breakfast:豆腐脑+油饼+小咸菜 |   10 |    1 |     10 | @六九豆浆 |
| Expenses | Foods.Meals     | Lunch:                       |      |      |        |           |
| Expenses | Foods.Meals     | Dinner:                      |      |      |        |           |
|----------+-----------------+------------------------------+------+------+--------+-----------|
| Expenses | Foods.Seasoning | 大料               |      |      |        |           |
| Expenses | Foods: Oil      | 花生油                       |      |      |        |           |
| Expenses | Foods: Cereal   | 大豆                         |      |      |        |           |
|----------+-----------------+------------------------------+------+------+--------+-----------|
| ExTotal  |                 |                              |      |      |     10 |           |

这个时候Extotal就被推到了第八行,

ExTotal的公式重新改成::=vsum(@2..@7)

带来的问题是表格模板可以写成snippet, 公式不行, 只能每次重新写.

怎样写出这样的公式

:=vsum(@2..@current_row --1)

(org) References 有说 < 表示第一个,> 表示最后一个;<< 表示第二个,>> 表示倒数第二个:

| Item  | Price |
|-------+-------|
| a     |     1 |
| b     |     2 |
| c     |     3 |
| d     |     4 |
|-------+-------|
| Total |    10 |
#+TBLFM: @>$>=vsum(@<<..@>>)
2 个赞