Могу ли я экспортировать конкретную таблицу из org-файла в csv из командной строки?

19

У меня есть файл org с несколькими таблицами

$ 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 |

Этот файл регулярно обновляется. У меня есть Perl-скрипт, который анализирует csvфайл, полученный при выдаче M-x org-table-exportна first-table. Я хотел бы иметь возможность экспортировать first-tableв CSV из командной строки, поэтому мне не нужно делать это каждый раз вручную. Это возможно?

Брайан Фитцпатрик
источник
1
Чтобы получить содержимое таблицы в файле Org, вы можете сделать (org-babel-ref-resolve "first-table")это - вы получите таблицу в виде списка, а затем вызовете orgtbl-to-csvэтот список. Смотрите документацию orgtbl-to-csvдля дополнительных аргументов. Затем вы можете запустить Emacs в пакетном режиме, чтобы выполнить вашу функцию, используя --evalили -fопции.
wvxvw

Ответы:

24

Вы можете найти таблицу и использовать org-table-exportдля ее экспорта. Вы можете поместить функцию в файл, загрузить ее и выполнить пакетный экспорт. Что-то вроде этого может быть:

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")))))

Затем с вашим примером файла вы можете выполнить пакетный экспорт следующим образом:

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

Мой поиск по таблице немного грубоват, но он работает.

suvayu
источник