Постоянное суммирование столбца в таблице организационного режима


87

В таблице Emacs Org-mode, когда у вас есть столбец, полный целых чисел, я знаю, что вы можете сделать, C-c +а затем C-yвставить сумму значений в столбец. Я хочу знать формулу, которую нужно разместить в последней строке, чтобы всегда суммировать весь столбец.

Все перепробовала. В документации показано, как суммировать два столбца, но не один.


4
Лучшее, что мне удалось сделать, это добавить высшую строку вверху и внизу таблицы и выполнить формулу столбца: = vsum (@I .. @ II)
Мовис Ледфорд

К вашему сведению, я только что разместил аналогичный вопрос о таргетинге hline здесь: stackoverflow.com/questions/6689424/… Этот вопрос уже набирает голоса, и ответ может быть другим, поэтому я пока оставлю его.
Mauvis Ledford

Ответы:


61

Назначьте имя поля с помощью ^знака:

|---+---|
|   | 1 |
|   | 2 |
|   | 3 |
|---+---|
|   | 6 |
| ^ | x |
|---+---|
#+TBLFM: $x=vsum(@1..@-1)

См . Руководство организации , раздел 3.5.9 «Дополнительные функции» .


Благодарность! В итоге это работает довольно хорошо, и меня это устраивает, однако теперь у меня есть строка «header» и «footer» с одинаковыми элементами. Есть ли способ сделать это, используя только заголовок hline. В документации это знак «-», но тогда я не знаю, как использовать vsum (@ 2 .. @ [last item]).
Mauvis Ledford

4
Вы также можете сделать#+TBLFM: @row$col=vsum(@1..@-1)
mgalgs

7
Я получаюUnknown field: x
накаливания

Еще у меня появилось неизвестное поле. Прочтите руководство, в основном в приведенном выше примере он вызывает строку над ^ xx, так что 6 вычисляется из vsum 1, 2, 3.
Джафир

58

Последняя строка таблицы: @> Например, чтобы получить сумму для третьего столбца в последней строке, вы можете использовать формулу

@>$3=vsum(@2..@-1)

Возможно, вам придется адаптировать @2, если у вас нет строки заголовка ...


40

Еще одна возможность - использовать горизонтальные линии ( @I, @IIи т.д.), которые в любом случае полезны для структурирования вашей таблицы:

| What  |    $$ |
|-------+-------|
| Ice   |  3.00 |
| Soda  |  6.49 |
| Gin   |  4.99 |
|-------+-------|
| Total | 14.48 |
#+TBLFM: @>$2=vsum(@I..@II)

Без заголовка пусть сумма начинается с того, @0что уже было предложено другими.

Изменить: я только что видел, что вы сами уже написали это в комментарии к своему вопросу.


Мне потребовалась минута, чтобы понять, что @I и @II относятся к горизонтальным правилам, но я думаю, что это самый простой способ сделать это, если вы организовываете свою таблицу таким образом.
threeve

9

Вы можете попробовать это:

$<col_num>=<func>(@2..@-1))

@2статичен. Это относится ко 2-му ряду и далее. @-1относится к предпоследней строке.

Думаю, это был самый простой и ненавязчивый способ. Он сохраняет имена столбцов и не загромождает визуальное пространство. Это не требует, чтобы вы обращались к последней строке. Адресуется по умолчанию.

Строки можно добавлять / удалять. Других маркеров нет.

например.
#+TBLFM: $3=vmean(@2..@-1)::$4=vsum(@2..@-1))

Образец таблицы

   | Time                   | Input             | Test      | InQty |
   | <2018-03-13 Tue 06:15> | Water             |           |   200 |
   | <2018-03-13 Tue 07:03> |                   |           |       |
   |                        |                   |           |       |
   | <2018-03-13 Tue 07:31> | Water             |           |   180 |
   | <2018-03-13 Tue 09:00> | Chai              |           |   240 |
   | <2018-03-13 Tue 11:30> | Chai              |           |   240 |
   | <2018-03-13 Tue 16:01> | Water             |           |    60 |
   |                        |                   |           |       |
   |------------------------+-------------------+-----------+-------|
   |                        |                   |           |   920 |
   #+TBLFM: $4=vsum(@2..@-1)

0
|  3 |
|  2 |
|  5 |
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)

@1относится к 1-й строке и @-1к строке, предшествующей строке, содержащей формулу. Эта формула игнорирует hlines:

|  3 |
|  2 |
|  5 |
|----|
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)

0

Что-то, что может быть не очевидно для читателя, - это то, что функция vsum()не sum ()

Другое дело, что @2..@-1это ссылка на метку строки для суммируемого столбца. $A$1Вещь в Excel, как @1$1так ссылка vsum(@2..@-1)говорит «сделать сумму значений из колонки, используя в качестве индекса строки в @значение в диапазоне 2, к -1th (т.е. второй последней) строки, а столбец "задано" в этом, поэтому его vsum применяется, [@2$col @3$col @4$col... @-1$col]если вы пытаетесь сопоставить эти концепции с Excel

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.