7

私は組織モードで予算を維持しており、そのシンプルさに満足しています。ただし、多くのセルで数式を実行しているため、単純さは失敗します。たとえば、各月に対して同じ取得して計算する数式を実行する年次集計テーブルです。+TBLFM に大量の行ができてしまいます。プログラムで式に引数を渡すことができれば、これは劇的に短くなります。私はこのようなものを探していますが、働いています:

| SEPT   |
| #ERROR |
#+TBLFM: @2$1=remote(@1,$tf)

他の場所には SEPT という名前のテーブルがあり、「tf」という名前のフィールドがあります。この関数は、「@1」を「SEPT」に置き換えると機能しますが、これにより、すべての列の数式に新しいエントリが必要になります。

これを機能させる方法はありますか?テーブル自体が呼び出すリモートテーブルを指定できます (私の例の SEPT など)?

4

2 に答える 2

7

はい、ビルトインではこれを行うことができず、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"すると、置換メカニズムがトリガーされ、このテーブルの最初のセルの内容で置換されます。

于 2013-03-29T08:51:11.133 に答える
3

使用せずに同じ効果のためのいくつかの醜いハックがありますremote

1)リモートアドレスの名前付き変数が必要です

(setq eab/test-remote "@1$1")

2)代わりに(org-table.elからの)elisp式を使用します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 |
于 2013-01-01T06:02:44.317 に答える