Sumar permanentemente una columna en una tabla en modo Org

87

En una tabla en modo Org de Emacs, cuando tiene una columna llena de números enteros, sé que puede hacerlo C-c +seguido de C-ypegar la suma de los valores en la columna. Quiero saber la fórmula para colocar en la última fila para sumar siempre toda la columna.

Lo he probado todo. Los documentos le muestran cómo sumar dos columnas juntas, pero no una.

Mauvis Ledford
fuente
4
Lo mejor que he podido obtener es agregar una línea alta en la parte superior e inferior de la tabla y hacer una fórmula de columna: = vsum (@I .. @ II)
Mauvis Ledford
Como informador, acabo de publicar una pregunta similar sobre la orientación de hline aquí: stackoverflow.com/questions/6689424/… Esta pregunta ya está recibiendo votos y la respuesta puede ser diferente, así que la dejaré mientras tanto.
Mauvis Ledford

Respuestas:

61

Asigne un nombre de campo usando la ^marca:

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

Consulte el Manual de la organización , Sección-3.5.9 Funciones avanzadas .

Huaiyuan
fuente
¡Gracias! Esto termina funcionando bastante bien y estoy bien con él, sin embargo, ahora tengo una línea de "encabezado" y una línea de "pie de página" con las mismas cosas. ¿Hay alguna forma de hacerlo usando solo la línea de encabezado? En los documentos es la marca "-", pero luego no sé cómo usar vsum (@ 2 .. @ [último elemento]).
Mauvis Ledford
4
También puedes hacerlo#+TBLFM: @row$col=vsum(@1..@-1)
mgalgs
7
Me pongoUnknown field: x
incandescentman
También obtuve un campo desconocido. Lea el manual, básicamente en el ejemplo anterior se llama a la fila arriba de ^ xx, de modo que el 6 se calcula a partir del vsum de 1, 2, 3.
Japhir
58

La última fila de una tabla es @> Por ejemplo, para obtener la suma de la tercera columna en la última línea, puede usar la fórmula

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

Tal vez tengas que adaptar @2, si no tienes una línea de encabezado ...

Andre
fuente
40

Otra posibilidad hace uso de líneas horizontales ( @I, @II, etc.), que de todos modos son útiles para estructurar la tabla:

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

Sin un encabezado, debe dejar que la suma comience como @0ya lo sugirieron otros.

Editar: Acabo de ver que ya escribiste esto en un comentario a tu pregunta.

Quazgar
fuente
Me tomó un minuto entender que @I y @II se refieren a las reglas horizontales, pero creo que esta es la forma más sencilla de hacerlo si organiza su tabla de esta manera.
tresve
9

Puedes probar esto:

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

@2es estático. Se refiere a la 2ª fila en adelante. @-1se refiere a la penúltima fila.

Creo que esta fue la forma más fácil y no intrusiva. Conserva los nombres de sus columnas y no satura el espacio visual. No requiere que se dirija a la última fila. Se trata de forma predeterminada.

Se pueden agregar / eliminar filas. No hay otros marcadores.

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

Mesa de muestra

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

@1se refiere a la 1ª fila y @-1a la fila que precede a la que contiene la fórmula. Esa fórmula ignora hlines:

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

Algo que puede no ser evidente para el lector es que la función vsum()no es suma ()

La otra cosa es que la @2..@-1cosa es una referencia a la etiqueta específica de fila para la columna que se está sumando. La $A$1cosa en Excel es como @1$1una referencia a vsum(@2..@-1)decir "haz una suma de los valores de la columna, usando como índice de fila el @valor en el rango 2, a la -1 (es decir, la segunda última) fila, pero la columna es un "dado" en esto, por lo que su vsum se aplica [@2$col @3$col @4$col... @-1$col]si intenta asignar estos conceptos a Excel

George Michaelson
fuente