emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Jeremie Juste <jeremiejuste@gmail.com>
To: Robert Pluim <rpluim@gmail.com>
Cc: Kein Test <soetwasaberauch@gmail.com>, emacs-orgmode@gnu.org
Subject: Re: org-table-sum
Date: Sat, 24 Oct 2020 17:15:38 +0200	[thread overview]
Message-ID: <874kmju02t.fsf@gmail.com> (raw)
In-Reply-To: <m25z822pvl.fsf@gmail.com> (Robert Pluim's message of "Fri, 25 Sep 2020 10:59:42 +0200")

Hello,

I have slightly improved the org-table-sum function.
It calls directly calc-eval and yield the same result as vsum.

It can not handle better floating points.
> | 171.00 |
> |   4.07 |
> |   4.44 |
> |   2.61 |
> |  12.21 |
> |   6.69 |
> |  19.72 |
> |  23.09 |
> |   6.23 |
> |  15.28 |
> | 250.00 |
> | 250.00 |
> | 250.00 |
> |  78.85 |
> |--------|
> |        |
> #+TBLFM:@>$1=vsum(@1$1..@-1$1)


diff --git a/lisp/org-table.el b/lisp/org-table.el
index a3c49874c..ac237af2c 100644
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -4728,6 +4728,18 @@ blank, and the content is appended to the field above."
      ((equal n 0) nil)
      (t n))))
 
+
+(defun org-table-cell-no-prop (x)
+  "remove property from org-table-cell. If cell is empty output nil. X is a string - a cell from org-table
+usage (org-table-cell-no-prop #(\"foo \" 0 2 (face default))) ==> foo
+"
+  (interactive)
+  (let ( (res (replace-regexp-in-string "\s+" "" 
+                                       (substring-no-properties x))))
+    (when (not (equal res ""))
+      res)
+    ))
+
 ;;;###autoload
 (defun org-table-sum (&optional beg end nlast)
   "Sum numbers in region of current table column.
@@ -4769,9 +4781,9 @@ If NLAST is a number, only the NLAST fields will actually be summed."
                           (t (setq items (reverse items))
                              (setcdr (nthcdr (1- nlast) items) nil)
                              (nreverse items))))
-            (numbers (delq nil (mapcar #'org-table--number-for-summing
-                                       items1)))
-            (res (apply '+ numbers))
+            (numbers (delq nil (mapcar 'org-table-cell-no-prop  items1 )))
+            (res (string-to-number (calc-eval
+                                    (combine-and-quote-strings numbers  "+")))) 


Best regards
Jeremie Juste


  parent reply	other threads:[~2020-10-24 15:16 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-24 19:38 org-table-sum Kein Test
2020-09-24 20:08 ` org-table-sum Mark Janes
2020-10-22 22:20   ` org-table-sum Jeremie Juste
2020-09-24 20:48 ` org-table-sum Kyle Meyer
2020-09-24 21:07   ` org-table-sum Kyle Meyer
2020-09-25  8:59   ` org-table-sum Robert Pluim
2020-09-26 23:07     ` org-table-sum Jeremie Juste
2020-09-28 12:27       ` org-table-sum Robert Pluim
2020-09-28 12:50         ` org-table-sum Jeremie Juste
2020-09-28 13:54           ` org-table-sum Robert Pluim
2020-10-24 15:15     ` Jeremie Juste [this message]
2020-09-25  7:51 ` org-table-sum Eric S Fraga

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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  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=874kmju02t.fsf@gmail.com \
    --to=jeremiejuste@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=rpluim@gmail.com \
    --cc=soetwasaberauch@gmail.com \
    --subject='Re: org-table-sum' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

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