Menjumlahkan kolom secara permanen dalam tabel Mode organisasi

87

Dalam tabel Emacs Org-mode, ketika Anda memiliki kolom yang penuh dengan bilangan bulat, saya tahu Anda dapat melakukannya C-c +diikuti dengan C-ymenempelkan jumlah nilai di kolom. Saya ingin mengetahui rumus yang harus ditempatkan di baris terakhir untuk selalu menjumlahkan seluruh kolom.

Saya sudah mencoba segalanya. The docs menunjukkan cara untuk meringkas dua kolom bersama-sama tetapi tidak satu.

Mauvis Ledford
sumber
4
Yang terbaik yang bisa saya dapatkan adalah menambahkan garis tinggi di bagian atas dan bawah tabel dan melakukan rumus kolom: = vsum (@I .. @ II)
Mauvis Ledford
Sebagai FYI, saya baru saja memposting pertanyaan serupa tentang penargetan hline di sini: stackoverflow.com/questions/6689424/… Pertanyaan ini sudah mendapatkan suara dan jawabannya mungkin berbeda, jadi saya akan membiarkannya sementara ini.
Mauvis Ledford

Jawaban:

62

Tetapkan nama bidang menggunakan ^tanda:

|---+---|
|   | 1 |
|   | 2 |
|   | 3 |
|---+---|
|   | 6 |
| ^ | x |
|---+---|
#+TBLFM: $x=vsum(@1..@-1)

Lihat Panduan Organisasi , Bagian-3.5.9 Fitur Lanjutan .

huaiyuan
sumber
Terima kasih! Ini akhirnya bekerja dengan cukup baik dan saya baik-baik saja dengan itu, namun, sekarang saya memiliki hline "header" dan "footer" dengan hal yang sama. Apakah ada cara untuk ini hanya dengan menggunakan header hline. Di dokumen ada tanda "-", tapi kemudian saya tidak tahu bagaimana menggunakan vsum (@ 2 .. @ [item terakhir]).
Mauvis Ledford
4
Anda juga dapat melakukannya#+TBLFM: @row$col=vsum(@1..@-1)
mgalgs
7
Saya mendapatkanUnknown field: x
incandescentman
Saya juga mendapat bidang yang tidak diketahui. Baca manualnya, pada dasarnya contoh di atas memanggil baris di atas ^ xx, sehingga angka 6 dihitung dari vsum 1, 2, 3.
Japhir
58

Baris terakhir tabel adalah @> Misalnya untuk mendapatkan jumlah kolom ketiga di baris terakhir, Anda bisa menggunakan rumus

@>$3=vsum(@2..@-1)

Mungkin Anda harus menyesuaikan @2, jika Anda tidak memiliki baris header ...

Andre
sumber
42

Namun merek kemungkinan lain menggunakan garis horizontal ( @I, @II, dll) yang berguna lagian untuk struktur meja Anda:

| What  |    $$ |
|-------+-------|
| Ice   |  3.00 |
| Soda  |  6.49 |
| Gin   |  4.99 |
|-------+-------|
| Total | 14.48 |
#+TBLFM: @>$2=vsum(@I..@II)

Tanpa header, biarkan jumlah mulai @0seperti yang sudah disarankan oleh orang lain.

Sunting: Saya baru saja melihat Anda menulis ini sendiri di komentar atas pertanyaan Anda.

quazgar
sumber
Saya butuh waktu beberapa menit untuk memahami bahwa @I dan @II mengacu pada aturan horizontal, tetapi menurut saya ini adalah cara termudah untuk melakukannya jika Anda mengatur tabel dengan cara ini.
threeve
9

Anda dapat mencoba ini:

$<col_num>=<func>(@2..@-1))

@2bersifat statis. Ini mengacu pada baris ke-2 dan seterusnya. @-1mengacu pada baris kedua hingga terakhir.

Saya pikir ini adalah cara termudah dan tidak mengganggu. Ini mempertahankan nama kolom Anda dan tidak mengacaukan ruang visual. Anda tidak perlu membahas baris terakhir. Ini ditangani secara default.

Baris dapat ditambahkan / dihapus. Tidak ada penanda lain.

misalnya.
#+TBLFM: $3=vmean(@2..@-1)::$4=vsum(@2..@-1))

Tabel sampel

   | Time                   | Input             | Test      | InQty |
   | <2018-03-13 Tue 06:15> | Water             |           |   200 |
   | <2018-03-13 Tue 07:03> |                   |           |       |
   |                        |                   |           |       |
   | <2018-03-13 Tue 07:31> | Water             |           |   180 |
   | <2018-03-13 Tue 09:00> | Chai              |           |   240 |
   | <2018-03-13 Tue 11:30> | Chai              |           |   240 |
   | <2018-03-13 Tue 16:01> | Water             |           |    60 |
   |                        |                   |           |       |
   |------------------------+-------------------+-----------+-------|
   |                        |                   |           |   920 |
   #+TBLFM: $4=vsum(@2..@-1)
Johnson
sumber
0
|  3 |
|  2 |
|  5 |
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)

@1mengacu pada baris ke-1, dan @-1ke baris sebelumnya yang memegang rumus. Rumus itu mengabaikan garis:

|  3 |
|  2 |
|  5 |
|----|
| 10 |
#+TBLFM: @4$1=vsum(@1..@-1)
Louis Strous
sumber
0

Sesuatu yang mungkin tidak terlihat oleh pembaca adalah fungsinya vsum() bukan sum ()

Hal lainnya, adalah @2..@-1hal itu, adalah referensi ke label khusus baris untuk kolom yang dijumlahkan. The $A$1hal dalam Excel adalah seperti @1$1jadi referensi untuk vsum(@2..@-1)mengatakan "melakukan penjumlahan nilai dari kolom, menggunakan sebagai indeks baris @nilai di kisaran 2, untuk -1th (yaitu detik terakhir) berturut-turut, tetapi kolom adalah a "diberikan" dalam hal ini sehingga vsum diterapkan [@2$col @3$col @4$col... @-1$col]jika Anda mencoba memetakan konsep ini ke Excel

George Michaelson
sumber