Постоянная времени в формуле emacs org-mode

Есть ли способ иметь постоянную времени в формуле электронной таблицы организации? Например, я хотел бы иметь что-то вроде этого:

@>$3=@>$5-'08:00:00'*vcount(@2..@-1)

чтобы рассчитать, насколько дольше я был на работе, чем должен быть :) @> $ 5 — это общая сумма часов, которые я провел на работе, а @ 2.. @-1 — это строки с днями, которые я провел. работал

Большое спасибо


person Arg    schedule 08.10.2014    source источник


Ответы (1)


Это может помочь вам:

|     16:00 |  1 |     8:00 |
|  1d 16:00 |  3 |    16:00 |
|      8:00 |  3 |   -16:00 |
|     -8:00 |  2 | -1d 0:00 |
| -1d 16:00 | -6 |     8:00 |
|      8:00 |  1 |     0:00 |
#+TBLFM: $3='(calculate-hours $1 $2 8)

(defun calculate-hours (sumhours numdays hours-per-day)
  (if (string-match
       "\\(-*?\\)\\([0-9]*?\\)\\(?:d \\)*\\([0-9]+\\):\\([0-9]+\\)"
       sumhours)
      (let* ((input-sign (match-string 1 sumhours))
         (total-days
          (string-to-number (match-string 2 sumhours)))
         (total-hours
          (+ (* total-days 24)
         (string-to-number (match-string 3 sumhours))
         (/ (string-to-number (match-string 4 sumhours)) 60.0)))
         (forecast-hours
          (- (if (string-equal input-sign "-")
             (* -1 total-hours)
           total-hours)
         (* hours-per-day (string-to-number numdays))))
         (sign (if (>= (signum forecast-hours) 0) "" "-"))
         (forecast-hours (abs forecast-hours)))
    (if (>= forecast-hours 24)
        (let ((forecast-days
           (truncate (/ forecast-hours 24))))
          (concat
           sign
           (number-to-string forecast-days)
           "d "
           (number-to-string
        (- (/ (truncate (* forecast-hours 100)) 100) (* forecast-days 24)))
           ":00"))
      (concat
       sign
       (number-to-string
        (/ (truncate (* forecast-hours 100)) 100)) ":00"))) 0.0))
person artscan    schedule 08.10.2014
comment
вау, это полный рот :) org table имеет очень хорошую математическую поддержку времени, поэтому я бы предпочел ее. Но спасибо за старание :) - person Arg; 08.10.2014
comment
Я должен был написать это в свое время, потому что я не нашел простого решения такой проблемы :) - person artscan; 08.10.2014