Puis-je exporter une table spécifique dans un fichier org vers csv à partir de la ligne de commande?

19

J'ai un fichier org avec plusieurs tables

$ cat ~/foo.org
#+Title: hello world

* section 1

lorem ipsum

#+TBLNAME: first-table
| i      | want | to    |
| export | this | table |

#+TBLNAME: second-table
| this | table | is        |
| not  | as    | important |

Ce fichier est mis à jour régulièrement. J'ai un script Perl qui analyse le csvfichier obtenu à partir de l' émission M-x org-table-exportsur first-table. Je voudrais pouvoir exporter first-tablevers csv à partir de la ligne de commande, donc je n'ai pas à le faire manuellement à chaque fois. Est-ce possible?

Brian Fitzpatrick
la source
1
Afin d'obtenir le contenu de la table dans un fichier Org, vous pouvez le faire (org-babel-ref-resolve "first-table")- cela vous donnera la table sous forme de liste, puis appelez orgtbl-to-csvsur cette liste. Voir la documentation de orgtbl-to-csvpour des arguments supplémentaires. Vous pouvez ensuite exécuter Emacs en mode batch pour exécuter votre fonction à l'aide de --evalou d' -foptions.
wvxvw

Réponses:

24

Vous pouvez rechercher la table et l'utiliser org-table-exportpour l'exporter. Vous pouvez placer la fonction dans un fichier, la charger et exporter par lots. Quelque chose comme ça peut-être:

setup.el:

(require 'org)

(defun my-tbl-export (name)
  "Search for table named `NAME` and export."
  (interactive "s")
  (show-all)
  (let ((case-fold-search t))
    (if (search-forward-regexp (concat "#\\+NAME: +" name) nil t)
    (progn
      (next-line)
      (org-table-export (format "%s.csv" name) "orgtbl-to-csv")))))

Ensuite, avec votre fichier d'exemple, vous pouvez exporter par lots comme ceci:

$ emacs --batch foo.org -l setup.el --eval '(my-tbl-export "first-table")'

Ma recherche de la table est un peu grossière, mais ça marche.

suvayu
la source