Eine Spalte in einer Org-Modus-Tabelle dauerhaft summieren

87

In einer Emacs Org-Modus Tabelle, wenn Sie eine Spalte voll von ganzen Zahlen haben weiß ich , was Sie tun können , C-c +gefolgt von C-yder Summe der Werte in der Spalte einzufügen. Ich möchte wissen, welche Formel in die letzte Zeile eingefügt werden soll, um immer die gesamte Spalte zu summieren.

Ich habe alles versucht. Die Dokumente zeigen Ihnen, wie Sie zwei Spalten zusammenfassen, aber nicht eine.

Mauvis Ledford
quelle
4
Das Beste, was ich bekommen konnte, ist, oben und unten in der Tabelle eine Highline hinzuzufügen und eine Spaltenformel zu erstellen: = vsum (@I .. @ II)
Mauvis Ledford
Als FYI habe ich gerade eine ähnliche Frage zum Thema Hline-Targeting hier gestellt: stackoverflow.com/questions/6689424/… Diese Frage erhält bereits Stimmen und die Antwort kann anders sein, daher werde ich sie in der Zwischenzeit offen lassen.
Mauvis Ledford

Antworten:

60

Weisen Sie einen Feldnamen mit der ^Markierung zu:

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

Siehe das Organisationshandbuch, Abschnitt 3.5.9 Erweiterte Funktionen .

Huaiyuan
quelle
Vielen Dank! Das funktioniert ziemlich gut und ich bin damit einverstanden, aber jetzt habe ich eine "Kopfzeile" und eine "Fußzeile" mit den gleichen Dingen. Gibt es eine Möglichkeit, dies nur mit der Kopfzeile zu tun? In den Dokumenten ist es die "-" Markierung, aber dann weiß ich nicht, wie man vsum verwendet (@ 2 .. @ [letzter Punkt]).
Mauvis Ledford
3
Sie können auch tun#+TBLFM: @row$col=vsum(@1..@-1)
mgalgs
7
Ich bekommeUnknown field: x
Glühlampen
Ich habe auch unbekanntes Feld. Lesen Sie das Handbuch. Im obigen Beispiel wird die Zeile über ^ xx aufgerufen, sodass die 6 aus dem vsum von 1, 2, 3 berechnet wird.
Japhir
54

Die letzte Zeile einer Tabelle lautet. @> Um beispielsweise die Summe für die dritte Spalte in der letzten Zeile zu erhalten, können Sie die Formel verwenden

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

Vielleicht müssen Sie das anpassen @2, wenn Sie keine Kopfzeile haben ...

Andre
quelle
39

Noch eine weitere Möglichkeit nutzt horizontalen Linien ( @I, @IIusw.) , die sowieso nützlich sind , um Ihren Tisch zu strukturieren:

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

Lassen Sie die Summe ohne Header so beginnen, @0wie es bereits von anderen vorgeschlagen wurde.

Bearbeiten: Ich habe gerade gesehen, dass Sie dies bereits selbst in einem Kommentar zu Ihrer Frage geschrieben haben.

Quazgar
quelle
Ich habe eine Minute gebraucht, um zu verstehen, dass sich @I und @II auf die horizontalen Regeln beziehen, aber ich denke, dies ist der einfachste Weg, dies zu tun, wenn Sie Ihre Tabelle auf diese Weise organisieren.
3.
9

Sie können dies versuchen:

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

@2ist statisch. Es bezieht sich auf die 2. Reihe ab. @-1bezieht sich auf die vorletzte Zeile.

Ich denke, das war der einfachste und nicht aufdringlichste Weg. Es behält Ihre Spaltennamen bei und überfrachtet den visuellen Raum nicht. Sie müssen nicht die letzte Zeile adressieren. Es wird standardmäßig angesprochen.

Zeilen können hinzugefügt / entfernt werden. Keine anderen Marker.

z.B.
#+TBLFM: $3=vmean(@2..@-1)::$4=vsum(@2..@-1))

Beispieltabelle

   | 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)
Johnson
quelle
0
|  3 |
|  2 |
|  5 |
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)

@1bezieht sich auf die 1. Zeile und @-1auf die Zeile vor der Zeile mit der Formel. Diese Formel ignoriert Hlines:

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