リクエスト広場

テーブルの自動連番付与プラグインの新設要望

7 コメント
views
3 フォロー

現在、テーブルに連番№が必要なデータを扱っているのですが、
400行以上のテーブル全体の中央辺りに追加でデータ行が増えると
その行以下の連番№がズレる為、
手作業で1列ずつ№の数字を増やして修正する必要があり、
データ行が増える度に毎回数百行修正する作業が非常に手間を感じます。
(その連番№が絶対に必要なデータなので連番№無しには出来ない)

そこで、
アットウィキの『#table_autoincrement()』table自動連番付与プラグインのように、
自動でtable連番が表示されるようなシステムがあると助かります。

イメージで言うと、
このテーブルにプラグインを適用すると
|~項1|~項2|~項3|~項4|~項5|h
|A|B|C|D|E|
|F|G|H|J|K|
|L|M|N|O|P|
|Q|R|S|T|U|
|V|W|X|Y|Z|
|~項1|~項2|~項3|~項4|~項5|
|A|B|C|D|E|
|F|G|H|J|K|
|L|M|N|O|P|
|Q|R|S|T|U|
|V|W|X|Y|Z|
|~項1|~項2|~項3|~項4|~項5|f

  ↓

自動でこんな表示になる感じにしたいです。
|~№|~項1|~項2|~項3|~項4|~項5|h
|1|A|B|C|D|E|
|2|F|G|H|J|K|
|3|L|M|N|O|P|
|4|Q|R|S|T|U|
|5|V|W|X|Y|Z|
|~№|~項1|~項2|~項3|~項4|~項5|
|6|A|B|C|D|E|
|7|F|G|H|J|K|
|8|L|M|N|O|P|
|9|Q|R|S|T|U|
|10|V|W|X|Y|Z|
|~№|~項1|~項2|~項3|~項4|~項5|f

以上、ご検討の程宜しくお願い致します。

名無し
作成: 2021/09/07 (火) 14:26:39
通報 ...
1
01v 2021/09/07 (火) 20:02:11 修正

求める機能はインラインのリスト機能(+)のテーブル版のイメージのようにみえますが、途中に挿入されてる項目行の扱いが気になります。

最初の表の途中にある|~項1|~項2|は、表が長くなってスクロールでヘッダが見えなくなったときのために適宜入れるものだと思いますが
下の表ではその行が連番ではなく|~№|が出るようになってます。
つまり機能として各行の意味を解釈して連番をつけるか、それ以外の表示をするのかの場合分けが必要ですか。
アットウィキの『#table_autoincrement()』をみましたが、そこまでできるようには見えませんでした。

また番号付けの考え方として、単純にカウントアップだけでいいのかも考慮が必要だと思います。降順に対応するのか、他の列でソートしたときどうするのかなど。
テーブルは名簿のようなものを想像しますが、名称にたいして固有の番号を付ける必要があるんですよね。つまりソートしたら番号も一緒にくっついて動かないといけないとか。

機能の書き方としてはtablesortのように既存のテーブルを囲むと左に列が追加されるイメージでしょうか。
他の形としては、予め自分でテーブルに番号列を用意してそこに|NUMBER:|みたいな書式を埋め込んで表示させる方法も考えられます。この書式指定は書式行cなら列全体に適用、セル毎なら個別に適用という形が考えられます。
前者は既存のテーブルに対して簡単に適用できるのと、機能のOn/Offが簡単です。
後者はどの行をカウントするのかを任意に選べるので汎用性が高いです。

2
01v 2021/09/07 (火) 20:40:30

いずれにせよこれが対応されるのかどうか、されたとしてもすぐはできないと思うので他の手を案内しておきます。

■編集技術
すでにやってることも含まれてるかもしれませんが、編集の手間削減としは以下を挙げます。

  • ソーステキストをブロック範囲指定して一行ずらす
    テキストエディタで行番号の部分のみをブロック範囲選択して、上にずらせばよいです。
    一番最後尾の行は手動で番号を+1書き足し。
    ちょうどwikiwikiの編集フォームβがブロック範囲選択に対応したので、これを使ってもできると思います。

  • スプレッドシートで管理
    私もwikiで何百行もある巨大な表を作りますが、それぐらい複雑になると元となるデータはスプレッドシートで管理しています。
    スプレッドシートなら行番の辻褄合わせは簡単にできると思います。(calcとかgoogleスプレッドシートとか)
    流れとしては

    • スプレッドシートで表を作成
    • テキストエディタに張り付け
    • wikiの書式なるように置換(先頭とタブ区切りと末尾を|に置換する)
    • wikiに張り付け(ヘッダhや書式行cは手で指定)
  • 正規表現置換
    置換機能が正規表現に対応していて、かつ数値計算もできるなら
    挿入行以降の番号を全部+1して置換すればよいと思います。
    ただテキストエディタだと正規表現はできても計算ができないかもしれません。
    できるならなにかスクリプト言語で。

3
01v 2021/09/07 (火) 20:51:16 修正

■既存のwikiの機能

  • wikiのテーブルを使わずにgoogleスプレッドシートを呼び出す
    前述のとおりスプレッドシートで管理でかつgoogleを使えるなら
    wiki上にgoogleスプレッドシートを呼び出す機能があるのでそれを使う。
    機能リンク
    ただしこれだと文字にリンクを付けたり、wiki内での検索はできない。

  • 脚注(())を行番号代わりに使う
    本来の使い方ではないですが、脚注(())はページ内に配置されてる個数に従って表示がカウントアップするのでこれを利用する。前述のNUMBER:と似たような考え方。
    例えば以下のように書く。
    |~№|~項1|~項2|~項3|~項4|~項5|h
    |(())|A|B|C|D|E|
    |(())|F|G|H|J|K|
    |(())|L|M|N|O|P|
    |(())|Q|R|S|T|U|
    |(())|V|W|X|Y|Z|
    |~№|~項1|~項2|~項3|~項4|~項5|
    |(())|A|B|C|D|E|
    試したところ1500行は問題なく表示できた。そんな時間もかからなかった。ただしフッターエリアがひどいことになる。

    • 1500行実験
      以下を実際に記述
      |1|(())|
      中略
      |1500|(())|
      HTML Converter Time (画面右上)の結果
      時間125ms、メモリ9.6MB、アクセス10回、データ46.9KB
      また、上記脚注(())を他の適当な機能なし記号に置き換えた場合は以下
      時間99ms、メモリ7.2MB、アクセス8回、データ25.5KB
  • tracker_plusを使う
    表の作り方を根本的に変えることになりますが、tracker_plusのlist機能で出力される表は連番を付ける機能があるのでこれを利用する。
    なんのことやらわからないかもしれませんが、集計機能のようなものを使うイメージです。
    ただしtracker_plusは表になる各行を所定のフォーマットで1ページ毎に記述することになるので、つまり400行の表を作るなら400ページ書く必要がある。またリスト表示の並びつまり番号の順番は、どこかの列の名前順ソートとか並びの規則性による。(人間が手で並び順を修正できなくもないが、更新作業が煩雑になる。)
    行番号のメリット以外に、更新を続けてる表の内容によってはより高度なことができるようになるかもしれない。例えば自分で作った任意の入力フォームで記入ができたり、特定の要素を含む行を抽出できたり、各行の内容を個々のページに綺麗にまとめたりなど。
    ただかなり異色のプラグインで使いこなすのは結構難しいです。

4
名無し 2021/09/08 (水) 19:26:48 c8255@984cb

様々な提案ありがとうございます。

仮にプラグインが対応される場合、
・項の「№」記載は何となくオプションで「№」「ID」等任意で差し込めたらいいなと思って記載しました。
 その際にヘッダではない表の途中にある|~項1|~項2|を判別する為にh,f以外の何かを行末に記載するイメージです。
・項目別ソート使用時は連番№も連動して欲しいです。
・昇順降順、連番番号種(1~、001~、A1~、A001~)、等も指定できたら嬉しいです。(1行目の連番開始文字を指定するイメージ)
・|NUMBER:|みたいな書式埋め型でも歓迎です。上記の「№」「ID」記載も自分で打ち込めばいいだけなので問題なしです。

>ソーステキストをブロック範囲指定して一行ずらす
>テキストエディタで行番号の部分のみをブロック範囲選択して、上にずらせばよいです。

この提案ですが、どうしても表示がズレてうまくいきません。
Altキーを押しながら行番号の部分のみをブロック範囲選択してから
上にズラすと下記のように1行ズラしではなく一括挿入押し出しみたいになってしまいます。
うまく行番号の部分のみ1行だけズラす方法が知りたいです…

№2~5の行番号部分をブロック範囲指定
|~№|~項1|~項2|~項3|~項4|~項5|h
|1|A|B|C|D|E|
|2|F|G|H|J|K|
|3|L|M|N|O|P|
|4|Q|R|S|T|U|
|5|V|W|X|Y|Z|
|~№|~項1|~項2|~項3|~項4|~項5|f

  ↓

上に1行ズラした結果
|~№|~項1|~項2|~項3|~項4|~項5|h
|1|
|2|
|3|
|4|
|5|A|B|C|D|E|
|F|G|H|J|K|
|L|M|N|O|P|
|Q|R|S|T|U|
|V|W|X|Y|Z|
|~№|~項1|~項2|~項3|~項4|~項5|f

5
01v 2021/09/08 (水) 21:22:53 >> 4

ブロック範囲でコピーして貼り付ける方法

  • 例えば以下が元のテーブル
    |1|A|B|C|D|E|
    |2|F|G|H|J|K|
    |3|L|M|N|O|P|
    |4|Q|R|S|T|U|
    |5|V|W|X|Y|Z|

  • 2行目に@行を挿入する
    |1|A|B|C|D|E|
    |@|@|@|@|@|@|
    |2|F|G|H|J|K|
    |3|L|M|N|O|P|
    |4|Q|R|S|T|U|
    |5|V|W|X|Y|Z|

  • コピーしたい範囲をブロック範囲選択でコピー
    2
    3
    4
    5
    やりづらかったら先頭の|を含めて選択してもよい

  • 貼り付けたい範囲をブロック範囲選択して貼り付け
    @
    2
    3
    4

  • 以下のようになるので末尾を手で修正
    |1|A|B|C|D|E|
    |2|@|@|@|@|@|
    |3|F|G|H|J|K|
    |4|L|M|N|O|P|
    |5|Q|R|S|T|U|
    |5|V|W|X|Y|Z| //ここを6に修正

注意点

  • 桁数ずれ
    0~9、10~99、100~999と桁が違うので、分割して操作するか、
    テーブルの記述を予め0やスペースで詰めて桁合わせをしておく。

  • 行数が多いと操作ミスしやすい
    wikiwikiの編集フォームの場合、ブロック選択操作時にドラッグで始点と終点を指定する必要がある。
    エディターによってはドラッグせずに始点クリックしてShift + Alt押し終点クリックで範囲選択できるのもあったと思うのでそういうのを探したほうがいいかも。

6
名無し 2021/09/09 (木) 06:40:00 d3f52@a19fb >> 5

コピー&ペーストすれば良かったんですね。ドラッグで1行ズラすと思い込んでいました。
解説通りに無事1行ズラせました。ありがとうございます。
私の場合は400行テーブルで20行毎に|~項1|~項2|行を設置しているので、
20行毎に分割してズラす必要はありますが、以前の全連番手打ち修正よりも楽になりました。

7
01v 2021/09/09 (木) 09:35:21 >> 5

その場合は一旦|~項1|~項2|行を削除して、まず番号を整えて、後で|~項1|~項2|行を挿入したほが効率がいいと思います。
項目行は最大20行くらいだと思いますが、置換で消してしまうのが早いです。
戻しも20行毎という規則性があるなら正規表現で工夫すると1回で戻せると思います。更新頻度がそんなに多くなければ手作業でもいいですが。