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.


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 .


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 ...


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.


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)

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.