2012-12-02 9 views
5

Conservo il mio budget in org-mode e sono stato soddisfatto di quanto sia semplice. La semplicità non riesce, tuttavia, poiché sto eseguendo formule su molte celle; ad esempio, la tabella di riepilogo dell'anno che esegue le stesse formule di calcolo e calcolo per ogni mese. Finisco con una linea enorme nel mio + TBLFM. Questo sarebbe drasticamente più breve se potessi passare in modo programmatico gli argomenti alla formula. Sto cercando qualcosa di simile, ma lavorando:Riferimenti remoti programmatici del foglio di lavoro in Org 1.

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

Altrove ho una tabella denominata settembre e ha campo denominato "tf". Questa funzione funziona se sostituisco "@ 1" con "SEPT", ma ciò mi richiederebbe una nuova voce nella formula per ogni colonna.

C'è un modo per farlo funzionare, dove la tabella stessa può specificare quale tabella remota chiamare (ad esempio SEPT nel mio esempio)?

+0

Solo in cima alla mia testa, è possibile passare variabili da tabelle a blocchi di codice di org-babel, e si potrebbe essere in grado di mettere un po 'di elis nel TBLFM. La combinazione di questi può ottenere qualcosa (non so se si può incorporare org-babel in TBLFM, sembra un po 'troppo lungo ...), ma non conosco la funzione 'remota' che si richiede per essere incorporata . Mi piacerebbe sapere la risposta però, se ne trovi di più, ti preghiamo di comunicarcelo. Forse ci provo un giorno. –

risposta

3

C'è qualche brutto hack per lo stesso effetto senza usare remote:

1) di cui ha bisogno per la variabile denominata indirizzo remoto

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

2) utilizza l'espressione elisp (da org-table.el) invece 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) lavorato esempio

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

#+TBLNAME: testname1 
| 1 | 

#+TBLNAME: testname2 
| 2 | 

4) Risultato

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

Sì, non si può fare questo con built-in remote ed è necessario utilizzare org-table-get-remote-range. Speriamo che questo si adatta meglio le vostre esigenze rispetto alla risposta data dal ARTScan (io ho usato la sua/il suo esempio):

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

#+TBLNAME: testname1 
| 1 | 

#+TBLNAME: testname2 
| 2 | 

Nota la (string [email protected] ?1 ?$ ?1): questo è necessario perché prima di valutare le formule di tabella, tutte le sostituzioni sarà fatto prima. Se si utilizza direttamente "@1$1", questo avrebbe attivato il meccanismo di sostituzione e sostituito dal contenuto della prima cella nella tabella nella tabella .