我将我的预算保留在组织模式中并且对它的简单程度感到满意。然而,简单性失败了,因为我在许多单元格上执行公式;例如,我的年度汇总表,每个月执行相同的抓取和计算公式。我最终在我的+ TBLFM中找到了一条巨大的线。如果我能以编程方式将参数传递给公式,这将大大缩短。我正在寻找类似的东西,但正在努力:
| SEPT |
| #ERROR |
#+TBLFM: @2$1=remote(@1,$tf)
在其他地方,我有一个名为SEPT的表,它的字段名为“tf”。如果我将“@ 1”替换为“SEPT”,则此功能有效,但这会导致我在每个列的公式中需要一个新条目。
有没有办法让这个工作,表本身可以指定要调用的远程表(例如我的例子中的SEPT)?
答案 0 :(得分:6)
是的,内置remote
无法执行此操作,您需要使用org-table-get-remote-range
。希望这比artscan给出的答案更合适(我用他/她的例子):
| testname1 | testname2 |
|-----------+-----------|
| 1 | 2 |
#+TBLFM: @2='(org-table-get-remote-range @<$0 (string ?@ ?1 ?$ ?1))
#+TBLNAME: testname1
| 1 |
#+TBLNAME: testname2
| 2 |
注意(string ?@ ?1 ?$ ?1)
:这是必要的,因为在评估表公式之前,所有替换都将首先完成。如果直接使用"@1$1"
,它将触发替换机制并被 this 表中第一个单元格的内容替换。
答案 1 :(得分:3)
在不使用remote
的情况下,有一些丑陋的黑客攻击相同的效果:
1)它需要远程地址的命名变量
(setq eab/test-remote "@1$1")
2)它使用elisp表达式(来自org-table.el)而不是remote(tablename,@1$1)
(defun eab/test-remote (x)
`(car (read
(org-table-make-reference
(org-table-get-remote-range ,x eab/test-remote)
't 't nil))))
3)工作实例
| testname1 | testname2 |
|-----------+-----------|
| | |
#+TBLFM: @2='(eval (eab/test-remote @1))
#+TBLNAME: testname1
| 1 |
#+TBLNAME: testname2
| 2 |
4)结果
| testname1 | testname2 |
|-----------+-----------|
| 1 | 2 |