Trwałe sumowanie kolumny w tabeli w trybie organizacyjnym

87

W tabeli trybu organizacji Emacsa, gdy masz kolumnę pełną liczb całkowitych, wiem, że możesz to zrobić, C-c +a następnie C-ywkleić sumę wartości w kolumnie. Chcę wiedzieć, jaką formułę należy umieścić w ostatnim wierszu, aby zawsze sumować całą kolumnę.

Próbowałem wszystkiego. W docs pokazać, jak podsumować dwie kolumny razem, ale nie jeden.

Mauvis Ledford
źródło
4
Najlepsze, co udało mi się uzyskać, to dodać highline na górze i na dole tabeli i wykonać formułę kolumny: = vsum (@I .. @ II)
Mauvis Ledford
Jako do Twojej wiadomości właśnie opublikowałem tutaj podobne pytanie dotyczące kierowania na linie: stackoverflow.com/questions/6689424/… To pytanie już zbiera głosy, a odpowiedź może być inna, więc w międzyczasie je zostawię.
Mauvis Ledford

Odpowiedzi:

61

Przypisz nazwę pola za pomocą ^znaku:

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

Patrz Podręcznik organizacji , Rozdział 3.5.9 Funkcje zaawansowane .

huaiyuan
źródło
Dzięki! Kończy się to całkiem nieźle i nie mam z tym problemu, jednak teraz mam hline „nagłówka” i „stopkę” hline z tymi samymi parametrami. Czy jest na to sposób, używając tylko nagłówka Hline. W dokumentach jest to oznaczenie „-”, ale potem nie wiem, jak używać vsum (@ 2 .. @ [ostatnia pozycja]).
Mauvis Ledford
4
Możesz też to zrobić#+TBLFM: @row$col=vsum(@1..@-1)
mgalgs
7
DostajęUnknown field: x
incandescentman
Mam też nieznane pole. Przeczytaj instrukcję, w zasadzie w powyższym przykładzie wywołuje wiersz powyżej ^ xx, tak że 6 jest obliczane z vsum 1, 2, 3.
Japhir
58

Ostatni wiersz tabeli to @> Na przykład, aby uzyskać sumę z trzeciej kolumny w ostatnim wierszu, możesz użyć formuły

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

Może musisz dostosować @2, jeśli nie masz linii nagłówka ...

Andre
źródło
40

Jeszcze inny marki Możliwość korzystania z linii poziomych ( @I, @IIetc.), które są użyteczne anyways uporządkować tabelę:

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

Bez nagłówka niech zaczyna się suma, @0jak już sugerowali inni.

Edycja: Właśnie zobaczyłem, że napisałeś to już sam w komentarzu do swojego pytania.

quazgar
źródło
Zajęło mi chwilę zrozumienie, że @I i @II odnoszą się do reguł poziomych, ale myślę, że jest to najprostszy sposób, aby to zrobić, jeśli zorganizujesz swój stół w ten sposób.
trzy czwarte
9

Możesz spróbować tego:

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

@2jest statyczny. Odnosi się do drugiego rzędu i dalej. @-1odnosi się do przedostatniego rzędu.

Myślę, że był to najłatwiejszy i nieinwazyjny sposób. Zachowuje nazwy kolumn i nie zaśmieca przestrzeni wizualnej. Nie wymaga adresowania ostatniego wiersza. Jest adresowany domyślnie.

Wiersze można dodawać / usuwać. Żadnych innych znaczników.

na przykład.
#+TBLFM: $3=vmean(@2..@-1)::$4=vsum(@2..@-1))

Przykładowy stół

   | 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
źródło
0
|  3 |
|  2 |
|  5 |
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)

@1odnosi się do pierwszego wiersza i @-1do wiersza poprzedzającego wiersz zawierający formułę. Ta formuła ignoruje linie:

|  3 |
|  2 |
|  5 |
|----|
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)
Louis Strous
źródło
0

Coś, co może nie być widoczne dla czytelnika, to funkcja vsum()nie jest sumą ()

Inną rzeczą jest to, że @2..@-1rzecz jest odwołaniem do etykiety konkretnego wiersza dla sumowanej kolumny. $A$1Rzeczą w programie Excel jest jak @1$1więc odniesienie do vsum(@2..@-1)mówi „zrobić sumę wartości z kolumny, stosując jako wskaźnik rzędu @wartość w zakresie od 2 do -1th (tj przedostatni wiersz), ale kolumna jest „dane” w tym przypadku, więc jego porównanie jest stosowane w [@2$col @3$col @4$col... @-1$col]przypadku próby zmapowania tych pojęć do programu Excel

George Michaelson
źródło