Скопируйте дату в организационную таблицу - PullRequest
1 голос
/ 23 сентября 2019

Предположим, что такая электронная таблица в организационной таблице

|------------+-------+------------+--------+--------+------------|
| Date       | Items | Unit Price | Amount | Amount | Categories |
|------------+-------+------------+--------+--------+------------|
| 2019/09/17 | A     |       2.64 |      1 |   2.64 | materials  |
|            | B     |      52.67 |      2 | 105.34 | diagnosis  |
|            | C     |       3.08 |      1 |   3.08 | materials  |
|            | D     |       3.85 |      2 |    7.7 | materials  |
|            | E     |      33.66 |      2 |  67.32 | materials  |
|            | F     |         40 |      1 |     40 | treatments |
|            | G     |       16.5 |      1 |   16.5 | materials  |
|            | H     |          4 |      3 |     12 | treatments |
|            | I     |         40 |      1 |     40 | bed        |
|            | M     |       6    |     13 |     78 | treatments |
|------------+-------+------------+--------+--------+------------|
#+TBLFM: $5=$3*$4

Как можно скопировать дату 2019/09.17 в конец столбца данных?

1 Ответ

1 голос
/ 28 сентября 2019

Ссылка , которую @manandearth разместил в комментариях, описывает, как дублировать (возможно, с небольшими изменениями) записи в столбце.Вкратце, нажатие S-RET в ячейке дублирует ее содержимое из указанной выше ячейки (если она не пустая) - если ячейка заполнена, а следующая ячейка пуста, то она дублирует всю ячейку до пустой ячейки.Если содержимое является числовым, то «дублирование» включает в себя небольшую модификацию: оно увеличивает значение на 1. То же самое происходит с датой: она увеличивает дату до следующего дня (но дата должна быть в формате, который соответствует режиму Orgраспознает: либо активную дату <YYYY-MM-DD>, либо неактивные данные [YYYY-MM-DD]).Приращение по умолчанию равно 1 в этих случаях, но его можно установить в другое значение, установив для переменной org-table-copy-increment другое значение.Это «интерактивный» случай, который я упоминаю в своем комментарии.

Другой способ заполнить столбец в таблице - использовать формулу.Например, вот формула для заполнения первого столбца копией первой записи в столбце:

#+TBLFM: @3$1..@>$1 = @2$1

Это говорит: Set all rows from row 3 (@3) to the last row (@>) of column 1 ($1) to the value of the cell in row 2 (@2), column 1 ($1).Обратите внимание, что строка 1 является заголовком.Нажмите C-c C-c в строке формулы таблицы выше и ... подождите, что случилось?

|------------+-------+------------+--------+--------+------------|
|       Date | Items | Unit Price | Amount | Amount | Categories |
|------------+-------+------------+--------+--------+------------|
| 2019/09/17 | A     |       2.64 |      1 |   2.64 | materials  |
|  13.196078 | B     |      52.67 |      2 | 105.34 | diagnosis  |
|  13.196078 | C     |       3.08 |      1 |   3.08 | materials  |
|  13.196078 | D     |       3.85 |      2 |    7.7 | materials  |
|  13.196078 | E     |      33.66 |      2 |  67.32 | materials  |
|  13.196078 | F     |         40 |      1 |     40 | treatments |
|  13.196078 | G     |       16.5 |      1 |   16.5 | materials  |
|  13.196078 | H     |          4 |      3 |     12 | treatments |
|  13.196078 | I     |         40 |      1 |     40 | bed        |
|  13.196078 | M     |          6 |     13 |     78 | treatments |
|------------+-------+------------+--------+--------+------------|
#+TBLFM: @3$1..@>$1 = @2$1

В данном случае это не совсем работает по технической причине: в режиме Org в вычислениях формулы таблицы используется Calc.Calc смотрит на 2019/09/17 и говорит: «Ага, я должен разделить 2019 на 9, а затем разделить результат на 17», и заполняет оставшуюся часть столбца результатом делений: 13.196078.Возможно, вы имели в виду 2019/09/17, чтобы быть датой, но режим Org этого не знает: он передает его Calc, который интерпретирует его как арифметическое выражение.Решение здесь такое же, как и в связанном ответе: уведомите режим Org о том, что это date , сделав его активной датой: <2019-09-17> или неактивной датой: [2019-09-17]:

|------------------+-------+------------+--------+--------+------------|
| Date             | Items | Unit Price | Amount | Amount | Categories |
|------------------+-------+------------+--------+--------+------------|
| [2019-09-17]     | A     |       2.64 |      1 |   2.64 | materials  |
| [2019-09-17 Tue] | B     |      52.67 |      2 | 105.34 | diagnosis  |
| [2019-09-17 Tue] | C     |       3.08 |      1 |   3.08 | materials  |
| [2019-09-17 Tue] | D     |       3.85 |      2 |    7.7 | materials  |
| [2019-09-17 Tue] | E     |      33.66 |      2 |  67.32 | materials  |
| [2019-09-17 Tue] | F     |         40 |      1 |     40 | treatments |
| [2019-09-17 Tue] | G     |       16.5 |      1 |   16.5 | materials  |
| [2019-09-17 Tue] | H     |          4 |      3 |     12 | treatments |
| [2019-09-17 Tue] | I     |         40 |      1 |     40 | bed        |
| [2019-09-17 Tue] | M     |          6 |     13 |     78 | treatments |
|------------------+-------+------------+--------+--------+------------|
#+TBLFM: @3$1..@>$1 = @2$1

Это не делает автоматического приращения, но если это то, что вам нужно, это легко сделать: Calc может выполнять вычисления по датам, поэтому мы можем увеличивать ежедневно, добавляя к дате в каждой строке номер строки минус 2 (например,строка 3 получит приращение 3-2 = 1, строка 4 получит 4-2 = 2 и т. д.).Для этого вам нужно получить номер текущей строки : идиома @#.Тогда формула становится:

#+TBLFM: @3$1..@>$1 = @2$1 + @# - 2

и таблица становится:

|------------------+-------+------------+--------+--------+------------|
| Date             | Items | Unit Price | Amount | Amount | Categories |
|------------------+-------+------------+--------+--------+------------|
| [2019-09-17]     | A     |       2.64 |      1 |   2.64 | materials  |
| [2019-09-18 Wed] | B     |      52.67 |      2 | 105.34 | diagnosis  |
| [2019-09-19 Thu] | C     |       3.08 |      1 |   3.08 | materials  |
| [2019-09-20 Fri] | D     |       3.85 |      2 |    7.7 | materials  |
| [2019-09-21 Sat] | E     |      33.66 |      2 |  67.32 | materials  |
| [2019-09-22 Sun] | F     |         40 |      1 |     40 | treatments |
| [2019-09-23 Mon] | G     |       16.5 |      1 |   16.5 | materials  |
| [2019-09-24 Tue] | H     |          4 |      3 |     12 | treatments |
| [2019-09-25 Wed] | I     |         40 |      1 |     40 | bed        |
| [2019-09-26 Thu] | M     |          6 |     13 |     78 | treatments |
|------------------+-------+------------+--------+--------+------------|
#+TBLFM: @3$1..@>$1 = @2$1+ @# - 2

Различные аномалии отображения дат (мы включаем день недели? Включаем ли мывремя?) можно обойти, используя org-time-stamp-custom-formats, но это уводит нас в воды, которые я не исследовал.

...