emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Pankaj Jangid <pankaj@codeisgreat.org>
To: emacs-orgmode@gnu.org
Subject: Transforming table and then exporting as CSV
Date: Thu, 29 Apr 2021 20:31:02 +0530	[thread overview]
Message-ID: <m2wnslrv81.fsf@codeisgreat.org> (raw)

I have the following requirement. For this I have written the code that

Bank requires from me a CSV file in this format:

--8<---------------cut here---------------start------------->8---
--8<---------------cut here---------------end--------------->8---

But this doesn’t have names of the people. First column shows the
account numbers. So I have created an org-table like this

--8<---------------cut here---------------start------------->8---
* April 2021
  :TABLE_EXPORT_FILE: enet_apr_2021/0684SAL2904.001.csv
  :TABLE_EXPORT_FORMAT: orgtbl-to-csv
  #+NAME: APR2021
  | NAME                  |     ACCOUNT NO | DR/CR |    AMOUNT | NARRATION |
  | Dh........ma...arwal  | 50.........658 | C     |  xxxxx.xx | APR2021   |
  | Pr........ar          | 50.........590 | C     |  xxxxx.xx | APR2021   |
  | Ol........y           | 50.........904 | C     |  xxxxx.xx | APR2021   |
  | Sa........gid         | 06.........965 | C     |  xxxxx.xx | APR2021   |
  | Pa........gid         | 50.........489 | C     |  xxxxx.xx | APR2021   |
  | Ma........ar          | 50.........680 | C     |  xxxxx.xx | APR2021   |
  | Sh........agi         | 50.........357 | C     |  xxxxx.xx | APR2021   |
  | TOTAL                 |                |       | xxxxxx.xx |           |
  #+TBLFM: $4=$4;%.2f
--8<---------------cut here---------------end--------------->8---

I have written below code for the conversion. This code removes the
first column and last row. And then run ‘org-table-export‘. This works

#+begin_src elisp
(require 'org)

(defun enet-export (name)
  (interactive "MTable Name: ")
  (let ((case-fold-search t))
    (goto-char (point-min))
    (if (search-forward-regexp (concat "#\\+NAME: +" name) nil t)
          (let* ((beg (org-table-begin))
                 (end (org-table-end))
                 (txt (buffer-substring-no-properties beg end))
                 (file (org-entry-get (point) "TABLE_EXPORT_FILE"))
                 (format (org-entry-get (point) "TABLE_EXPORT_FORMAT")))
              (insert txt)
              (goto-char (point-min))
              (goto-char (org-table-end))
              (org-entry-put (point) "TABLE_EXPORT_FILE" file)
              (org-entry-put (point) "TABLE_EXPORT_FORMAT" format)
              (make-directory (file-name-directory file) t)
      (message "Not Found"))))

Same org file has multiple tables, so I am asking for “Table Name”. I
want to do two improvements:

1. When asking for table name, I want to offer all the table names in
   the file as completion options.

2. Current table at point as default

3. I want to run the function from command line. Like,

--8<---------------cut here---------------start------------->8---
   emacs --batch enet_2021_22.org -l enet.el --eval="(enet-export \"APR2021\")"
--8<---------------cut here---------------end--------------->8---

   Do I need to change the (interactive...) part in any way to enable


             reply	other threads:[~2021-04-30  4:30 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-29 15:01 Pankaj Jangid [this message]
2021-05-01 17:41 ` Transforming table and then exporting as CSV Kyle Meyer
2021-05-03 13:55   ` Pankaj Jangid

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2wnslrv81.fsf@codeisgreat.org \
    --to=pankaj@codeisgreat.org \
    --cc=emacs-orgmode@gnu.org \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).