2012-12-02 3 views
5

Ich behalte mein Budget im Org-Modus und habe mich gefreut, wie einfach es ist. Die Einfachheit versagt jedoch, da ich Formeln auf vielen Zellen durchführe; Zum Beispiel meine Jahr-Übersichtstabelle, die für jeden Monat dieselben Formeln zum Ergreifen und Berechnen durchführt. Ich habe eine massive Linie in meiner + TBLFM. Dies wäre wesentlich kürzer, wenn ich Argumente programmatisch an die Formel übergeben könnte. Ich bin auf der Suche nach so etwas wie dies, aber der Arbeit:Org-Modus Tabellenkalkulation programmatische remote Referenzen

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

An anderer Stelle habe ich eine Tabelle mit dem Namen September und es hat Feld mit dem Namen „tf“. Diese Funktion funktioniert, wenn ich "@ 1" durch "SEPT" ersetze, aber dies würde dazu führen, dass ich für jede Spalte einen neuen Eintrag in der Formel brauche.

Gibt es eine Möglichkeit, dies zum Laufen zu bringen, wo die Tabelle selbst angeben kann, welche Remote-Tabelle aufgerufen werden soll (wie die SEPT in meinem Beispiel)?

+0

Nur auf den Kopf, können Sie Variablen aus Tabellen an Org-Babel-Code-Blöcke übergeben, und Sie können möglicherweise einige Elisp in der TBLFM setzen. Kombinieren kann etwas erreichen (ich weiß nicht, ob Sie in TBLFM inline org-babel, klingt ein bisschen wie eine Strecke ...), aber ich weiß nicht, die "Remote" -Funktion, die Sie für die eingebaute aufgerufen werden . Ich würde gerne die Antwort wissen, wenn Sie mehr darüber erfahren, bitte sagen Sie uns. Vielleicht werde ich es eines Tages versuchen. –

Antwort

3

Es gibt einige hässliche Hack für gleiche Wirkung ohne remote mit:

1) es muss benannte Variable für Remote-Adresse

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

2) verwendet es elisp Ausdruck (von org-table.el) statt 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) arbeitete Beispiel

| testname1 | testname2 | 
|-----------+-----------| 
|   |   | 
#+TBLFM: @2='(eval (eab/test-remote @1)) 

#+TBLNAME: testname1 
| 1 | 

#+TBLNAME: testname2 
| 2 | 

4) führen

| testname1 | testname2 | 
|-----------+-----------| 
|   1 |   2 | 
4

Ja, man kann das nicht mit eingebautem in remote und Sie müssen org-table-get-remote-range verwenden. Hoffentlich besser zu Ihren Ansprüchen passt als die Antwort von ARTScan (I verwendet sein/ihr Beispiel):

| testname1 | testname2 | 
|-----------+-----------| 
|   1 |   2 | 
#+TBLFM: @2='(org-table-get-remote-range @<$0 (string [email protected] ?1 ?$ ?1)) 

#+TBLNAME: testname1 
| 1 | 

#+TBLNAME: testname2 
| 2 | 

Notiere die (string [email protected] ?1 ?$ ?1): Dies ist notwendig, da vor Tabelle Formeln Auswertung werden alle Ersetzungen zuerst getan werden. Wenn Sie "@1$1" direkt verwenden, hätte es den Substitutionsmechanismus ausgelöst und durch den Inhalt der ersten Zelle in diese Tabelle ersetzt.

Verwandte Themen