Emacs 组织模式表中的列永久求和

Emacs 组织模式表中的列永久求和,emacs,org-mode,org-table,Emacs,Org Mode,Org Table,在Emacs组织模式表中,当您有一列完整的整数时,我知道您可以执行C-C+,然后执行C-y来粘贴列中的值之和。我想知道放在最后一行的公式,它总是对整列求和 我什么都试过了。演示如何将两列相加,而不是一列相加。使用^标记指定字段名: |---+---| | | 1 | | | 2 | | | 3 | |---+---| | | 6 | | ^ | x | |---+---| #+TBLFM: $x=vsum(@1..@-1) 请参阅。表格的最后一行是@> 例如,要获取最后一行第三

在Emacs组织模式表中,当您有一列完整的整数时,我知道您可以执行
C-C+
,然后执行
C-y
来粘贴列中的值之和。我想知道放在最后一行的公式,它总是对整列求和


我什么都试过了。演示如何将两列相加,而不是一列相加。

使用
^
标记指定字段名:

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

请参阅。

表格的最后一行是
@>
例如,要获取最后一行第三列的总和,可以使用以下公式

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

如果没有标题行,可能您必须调整
@2

另一种可能性是使用水平行(
@I
@II
,等等),这对构建表很有用:

| What  |    $$ |
|-------+-------|
| Ice   |  3.00 |
| Soda  |  6.49 |
| Gin   |  4.99 |
|-------+-------|
| Total | 14.48 |
#+TBLFM: @>$2=vsum(@I..@II)
在没有标题的情况下,华中科技大学让总和从
@0
开始,正如其他人已经建议的那样

编辑: 我刚刚看到你已经在对你的问题的评论中写了这篇文章。

你可以试试这个:

$=(@2..@-1))

@2
是静态的。它指的是第二排以后。
@-1
指倒数第二行

我认为这是最简单和非侵入性的方式。它保留您的列名,不会使可视空间混乱。它不要求您处理最后一行。默认情况下会对其进行处理

可以添加/删除行。 没有其他标记

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

样本表

   | 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)
|时间|输入|测试|输入数量|
||水| | 200|
|  |                   |           |       |
|                        |                   |           |       |
||水| | 180|
||柴| 240|
||柴| 240|
||水| | 60|
|                        |                   |           |       |
|------------------------+-------------------+-----------+-------|
|                        |                   |           |   920 |
#+TBLFM:$4=vsum(@2..@-1)
@1
表示第1行,
@-1
表示包含公式的行之前的行。该公式忽略了hline:

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

读者可能不太清楚的是函数is
vsum()
notsum()


另一件事是,
@2..@-1
是对要求和的列的行特定标签的引用。Excel中的
$A$1
类似于
@1$1
,因此对
vsum(@2..@-1)
的引用是说“使用范围2中的
@
值作为行索引,对列中的值进行求和,直到-1行(即倒数第二行),但该列是“给定”的,因此其vsum应用于
[@2$col@3$col@4$col..@-1$col]
如果您试图将这些概念映射到Excel中,我所能得到的最好结果就是在表的顶部和底部添加一条高行,并执行一个列公式:=vsum(@I..@II)仅供参考,我刚刚在此处发布了一个关于hline targeting的类似问题:这个问题已经获得了投票,答案可能不同,所以我暂时不提。谢谢!这最终效果很好,我也很满意,不过,我现在有了“页眉”hline和“页脚”“hline具有相同的功能。有没有办法只使用标题hline。在文档中是“-”标记,但我不知道如何使用vsum(@2..@[最后一项])。您也可以执行
.+TBLFM:@row$col=vsum(@1..@-1)
I get
Unknown field:x
我也得到了Unknown field。请阅读手册,基本上在上面的示例中,它调用^x上方的行,以便从1、2、3的vsum计算6。请注意,^应该在表的第一列中。而不仅仅是要求和的前一列。我花了一分钟才理解而且@I和@II指的是水平规则,但我认为如果你这样组织你的表,这是最简单的方法。
|  3 |
|  2 |
|  5 |
|----|
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)