Somma permanente di una colonna in una tabella in modalità organizzazione


87

In una tabella in modalità Emacs Org, quando hai una colonna piena di numeri interi so che puoi fare C-c +seguito da C-yper incollare la somma dei valori nella colonna. Voglio conoscere la formula da inserire nell'ultima riga per sommare sempre l'intera colonna.

Ho provato di tutto. I documenti mostrano come sommare due colonne insieme ma non una.


4
Il meglio che sono riuscito a ottenere è stato aggiungere una linea alta nella parte superiore e inferiore della tabella e fare una formula di colonna: = vsum (@I .. @ II)
Mauvis Ledford

Come un FYI, ho appena inviato una domanda simile su hline mira qui: stackoverflow.com/questions/6689424/... Questa domanda sta già ottenendo voti e la risposta può essere diversa, quindi mi lascerò nel frattempo.
Mauvis Ledford

Risposte:


62

Assegna un nome di campo utilizzando il ^segno:

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

Vedere il Manuale dell'organizzazione , Sezione 3.5.9 Funzionalità avanzate .


Grazie! Questo finisce per funzionare abbastanza bene e sto bene con esso, tuttavia, ora ho una hline "header" e una hline "footer" con le stesse cose. C'è un modo per farlo usando solo l'hline dell'intestazione. Nella documentazione è il segno "-", ma poi non so come usare vsum (@ 2 .. @ [ultimo elemento]).
Mauvis Ledford

4
Puoi anche farlo#+TBLFM: @row$col=vsum(@1..@-1)
mgalgs

7
OttengoUnknown field: x
Incandescentman

Ho anche un campo sconosciuto. Leggi il manuale, fondamentalmente nell'esempio sopra si chiama la riga sopra ^ xx, in modo che il 6 sia calcolato dal vsum di 1, 2, 3.
Japhir

58

L'ultima riga di una tabella è @> Ad esempio, per ottenere la somma per la terza colonna nell'ultima riga, puoi utilizzare la formula

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

Forse devi adattare il @2, se non hai una riga di intestazione ...


42

Ancora un altro marchi possibilità uso di linee orizzontali ( @I, @IIecc), che sono utili comunque per strutturare il tavolo:

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

Senza un'intestazione, lascia che la somma inizi @0come già suggerito da altri.

Modifica: ho appena visto che l'hai già scritto tu stesso in un commento alla tua domanda.


Mi ci è voluto un minuto per capire che @I e @II si riferiscono alle regole orizzontali, ma penso che questo sia il modo più semplice per farlo se organizzi la tua tabella in questo modo.
tre

9

Puoi provare questo:

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

@2è statico. Si riferisce alla 2a riga in poi. @-1si riferisce alla penultima riga.

Penso che questo sia stato il modo più semplice e non invadente. Conserva i nomi delle colonne e non ingombra lo spazio visivo. Non richiede di indirizzare l'ultima riga. Viene indirizzato per impostazione predefinita.

Le righe possono essere aggiunte / rimosse. Nessun altro marker.

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

Tabella di esempio

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

@1si riferisce alla prima riga e @-1alla riga che precede quella contenente la formula. Quella formula ignora le hline:

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

0

Qualcosa che potrebbe non essere evidente a un lettore è che la funzione vsum()non è sum ()

L'altra cosa è che l' @2..@-1oggetto è un riferimento all'etichetta specifica della riga per la colonna da sommare. La $A$1cosa in Excel è @1$1così un riferimento a vsum(@2..@-1)sta dicendo "fai una somma dei valori dalla colonna, usando come indice di riga il @valore nell'intervallo 2, alla -1a (cioè penultima) riga, ma la colonna è un "dato" in questo, quindi il suo vsum viene applicato [@2$col @3$col @4$col... @-1$col]se provi a mappare questi concetti in Excel

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.