Somando permanentemente uma coluna em uma tabela de modo organizacional


87

Em uma tabela Emacs Org-mode, quando você tem uma coluna cheia de inteiros, eu sei que você pode fazer C-c +seguido por C-ycolar a soma dos valores na coluna. Quero saber a fórmula a ser colocada na última linha para sempre somar a coluna inteira.

Já tentei de tudo. Os documentos mostram como somar duas colunas, mas não uma.


4
O melhor que consegui obter foi adicionar um highline na parte superior e inferior da tabela e fazer uma fórmula de coluna: = vsum (@I .. @ II)
Mauvis Ledford

Como um FYI, acabei de postar uma pergunta semelhante sobre segmentação hline aqui: stackoverflow.com/questions/6689424/… Esta pergunta já está recebendo votos e a resposta pode ser diferente, então vou deixá-la enquanto isso.
Mauvis Ledford

Respostas:


61

Atribua um nome de campo usando a ^marca:

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

Consulte o Manual da Org , Seção 3.5.9 Recursos avançados .


Obrigado! Isso acaba funcionando muito bem e estou bem com isso, no entanto, agora tenho um "cabeçalho" hline e "rodapé" hline com as mesmas coisas. Existe uma maneira de fazer isso usando apenas o cabeçalho hline. Na documentação está a marcação "-", mas não sei como usar o vsum (@ 2 .. @ [último item]).
Mauvis Ledford

4
Você também pode fazer#+TBLFM: @row$col=vsum(@1..@-1)
mgalgs

7
Eu entendoUnknown field: x
incandescente de

Eu também tenho um campo desconhecido. Leia o manual, basicamente no exemplo acima, ele chama a linha acima de ^ xx, de modo que o 6 é calculado a partir do vsum de 1, 2, 3.
Japhir

58

A última linha de uma tabela é @> Por exemplo, para obter a soma da terceira coluna na última linha, você pode usar a fórmula

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

Talvez você tenha que adaptar o @2, se você não tiver uma linha de cabeçalho ...


40

Ainda outra possibilidade faz uso de linhas horizontais ( @I, @II, etc.) que são úteis de qualquer maneira para estruturar sua tabela:

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

Sem um cabeçalho, deve deixar a soma começar @0conforme já sugerido por outros.

Edit: Acabei de ver que você mesmo já escreveu isso em um comentário à sua pergunta.


Levei um minuto para entender que @I e @II se referem às regras horizontais, mas acho que essa é a maneira mais simples de fazer isso se você organizar sua mesa dessa maneira.
quinta

9

Você pode tentar isto:

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

@2é estático. Refere-se à 2ª linha em diante. @-1refere-se à penúltima linha.

Acho que essa foi a maneira mais fácil e não intrusiva. Ele preserva os nomes das colunas e não confunde o espaço visual. Não requer que você aborde a última linha. Ele é endereçado por padrão.

Linhas podem ser adicionadas / removidas. Nenhum outro marcador.

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

Mesa de amostra

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

@1refere-se à 1ª linha e @-1à linha anterior àquela que contém a fórmula. Essa fórmula ignora hlines:

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

0

Algo que pode não ser aparente para o leitor é que a função vsum()não é soma ()

A outra coisa, é que a @2..@-1coisa, é uma referência ao rótulo específico da linha para a coluna que está sendo somada. A $A$1coisa no Excel é como @1$1uma referência a vsum(@2..@-1)dizer "faça uma soma dos valores da coluna, usando como o índice da linha o @valor no intervalo 2, a -1 (ou seja, penúltimo) linha, mas a coluna é um "dado" neste, então seu valor será aplicado [@2$col @3$col @4$col... @-1$col]se você tentar mapear esses conceitos no Excel

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.