2014-02-22 3 views
0

에서 약속의 시간 나는 스타일로 약속 목록을 가지고 : 내 약속의 기간을 계산 orgmode계산 orgmode 테이블

| Appointment     | Dur. | 
|------------------------------+-------| 
| <2014-02-20 Thu 09:30-18:30> | ??? | 
| <2014-02-22 Sat 09:00-10:00> | ??? | 
|        |  | 

어떻게 할 수 있습니까?

답변

2

조직 모드에서는 주어진 열의 값을 계산하기위한 수식을 지정할 수 있습니다. 이러한 수식에서 elisp 코드를 실행할 수 있습니다. 우리는 당신이 먼저 원하는 것을 얻기 위해 feature를 사용할 수 있습니다. 우리는 시간의 차이를 발견 할 수있는 몇 가지 함수를 정의 할 필요가 있습니다. 당신은

#+begin_src emacs-lisp 
    (defun my-get-number-of-minutes (time) 
    (+ (* (nth 2 time) 60) (nth 1 time))) 

    (defun my-get-time-diff (t1 t2) 
    (- (my-get-number-of-minutes t1) (my-get-number-of-minutes t2))) 

    (defun my-get-duration (time-string) 
    (let* ((times (split-string (substring time-string 16 -1) "-")) 
      (minute-diff (my-get-time-diff (parse-time-string (nth 1 times)) 
              (parse-time-string (nth 0 times))))) 
     (format "%dhrs %dmins" (/ minute-diff 60) (% minute-diff 60)))) 
#+end_src 

그런 다음C-C 어디서나 #+begin-src emacs-lisp#+end-src 태그 사이, 이것은 elisp을 평가합니다 C-C을 당신의 조직 문서에 다음을 추가 할 수 있습니다.

OR

단순히 *scratch* 버퍼 ( #+end-src #+begin_src emacs-lisp 사이)에 elisp 코드를 복사 M-X eval-buffer RET을한다. 이제이 기능은 우리가 단순히이 지시

#+TBLFM: $2='(my-get-duration $1) 

또 org 테이블 아래에 다음 줄을 붙여이 작업을 수행하기 위해, 첫 번째 열에서 두 번째 열을 계산하는 공식 조직 모드를 말할 수있는 정의했다고

org 2의 값 ($2)은 my-get-duration 함수에 '열 값 1'($2)이 적용됩니다. 그런 다음 행의 포인트가 C-C-c 인 경우 모두 완료했으면 두 번째 열에 기간을 입력해야합니다.

참고 : 코드는 datetime이 예제에 제공된 것과 동일한 형식으로 가정합니다.

org- 모드의 기능에 대해 this 짧은 문서를 스프레드 시트로 읽는 것이 좋습니다.

UPDATE

다음과 같이 테이블을 포맷 할 수 있다면, 당신은 시간을 계산하는 공식은 이제 단순히 것

| Appointment  | Start | End | Duration | 
|------------------+-------+-------+----------| 
| <2014-02-20 Thu> | 09:30 | 18:30 | ???  | 
| <2014-02-22 Sat> | 09:00 | 10:00 | ???  | 

공식을 단순화 할 수있을 것입니다

#+TBLFM: $4=$3-$2;T 
+0

고마워요! 이것은 완벽하게 잘 작동합니다. – marian

+0

안녕하세요 @ 매리언, 나는 다른 해결책으로 답변을 업데이 트했습니다. –

+0

안녕하세요. 그러나 이런 식으로, 나는 내 의제에서 약속의 시간을 보지 못한다. – marian