From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thorsten Jolitz Subject: Re: manipulate org tables using emacs-lisp Date: Sat, 01 Oct 2016 18:32:45 +0200 Message-ID: <87intcyqqa.fsf@gmail.com> References: <87k2dtm7or.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:40848) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bqNDk-0007U1-UU for emacs-orgmode@gnu.org; Sat, 01 Oct 2016 12:33:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bqNDg-0000JZ-42 for emacs-orgmode@gnu.org; Sat, 01 Oct 2016 12:33:04 -0400 Received: from [195.159.176.226] (port=44262 helo=blaine.gmane.org) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bqNDf-0000IZ-TO for emacs-orgmode@gnu.org; Sat, 01 Oct 2016 12:33:00 -0400 Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1bqNDX-0000nt-55 for emacs-orgmode@gnu.org; Sat, 01 Oct 2016 18:32:51 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org Alan Schmitt writes: Hi Alan, > On 2016-09-30 22:52, Thorsten Jolitz writes: > >>> Are there functions for manipulating org-tables using emacs-lisp? More >>> precisely, I would like to refer to a table by its name, read some cells >>> (either by position or by matching some given text with some text in the >>> first row/column), and write in some cells. >> >> ,----[ C-h f org-table-to-lisp RET ] >> | org-table-to-lisp is an autoloaded compiled Lisp function in >> | ‘../org-mode/lisp/org-table.el’. >> | >> | (org-table-to-lisp &optional TXT) >> | >> | Convert the table at point to a Lisp structure. >> | The structure will be a list. Each item is either the symbol ‘hline’ >> | for a horizontal separator line, or a list of field values as strings. >> | The table is taken from the parameter TXT, or from the buffer at point. >> | >> | [back] >> `---- >> >> returns the table as a nested list you can map with lots of Elisp >> functions (like mapcar). >> >> Ex.: >> >> | my | tab | >> | 1 | 2 | >> >> => >> >> (("my" "tab") ("1" "2")) > > This is very useful, thank you. But how do I go to a named table? I > found org-babel-goto-named-block, but nothing for tables. you can try ,----[ C-h f org-table-map-tables RET ] | org-table-map-tables is a compiled Lisp function in | ‘../org-mode/lisp/org.el’. | | (org-table-map-tables FUNCTION &optional QUIETLY) | | Apply FUNCTION to the start of all tables in the buffer. | | [back] `---- to go to all tables in the buffer, then inside FUNCTION you would need to check first if the table is named and is the one your are looking for. If so, get the table as list, work on the list, and insert the new table replacing the old one (org-dp-create-table inserts a table when given a nested list). Finally move point to the end of the inserted table, so the mapping function can continue. PS org-element and org-dp allow you to do these things too, maybe even more comfortably if you are familiar with these libraries. But right now I'm not really able to give you a working example in reasonable time. -- cheers, Thorsten