はじめに
ExcelやHTMLのテーブルをMarkdownとして貼り付けたいときがしばしばあると思います。Web上の便利ツールでそういうものがありますが、毎回ブラウザにコピペしたりボタンをクリックするのがやや煩わしいです。
そこで
- データをコピー
- F1キー or コマンド実行
- Markdownのテーブルとしてペースト
できるようにしてみます。
この技は pbcopy
pbpaste
というクリップボードにデータを読み書きする(たぶん)Macにしかないコマンドを使っているので、このままだとMac専用技ですが、そこさえなんとかなれば当然他の環境でもできることになります。
方法
変換スクリプトの設置
以下のようなスクリプトを 適当な場所に作ります。
今回は /Users/mokemokechicken/util/clipboard_tsv_to_markdown_table
においたとします。
# !/bin/bash
temp=$(mktemp)
pbpaste | perl -pe 's/\r([^\n])/\n\1/g' > "$temp"
replace () {
tr "\t" "|" | sed 's/ */|/g' | sed 's/^\(.*\)$/|\1|/'
}
(
cat "$temp" | head -n 1 | replace
cat "$temp" | sed 1d | head -n 1 | replace | perl -pe 's/[^|]+\|/-----|/g'
cat "$temp" | sed 1d | grep -e '\S' | replace
) | pbcopy
rm "$temp"
ファイルを作ったら実行許可を与えておきます。
chmod +x /Users/mokemokechicken/util/clipboard_tsv_to_markdown_table
試す
基本的にはこれで準備は終わりで、
Excelなどのセルをコピーして、上記のスクリプトを実行して、ペーストすると変換されているはずです。
例えば、 (後述の[HTMLの表をコピーするには]を設定しておけば)
https://ja.wikipedia.org/wiki/%E5%9B%BD%E3%81%AE%E4%BA%BA%E5%8F%A3%E9%A0%86%E3%83%AA%E3%82%B9%E3%83%88
から「国と非独立地域の順位一覧」の上位の部分をコピーして、スクリプトを実行して、ペーストすると以下のように変換されます。
右寄せ、左寄せ、中央寄せなどは人間が後で調整することにします。
順位 | 国 | 2010年推計人口 |
---|---|---|
? | 世界の旗 世界 (人口) | 6,895,889,018 |
1 | 中華人民共和国の旗 中国 | 1,341,335,152 |
2 | インドの旗 インド | 1,224,514,327 |
3 | アメリカ合衆国の旗 アメリカ合衆国 | 310,383,948 |
4 | インドネシアの旗 インドネシア | 239,870,937 |
5 | ブラジルの旗 ブラジル | 194,946,470 |
6 | パキスタンの旗 パキスタン | 173,593,383 |
7 | ナイジェリアの旗 ナイジェリア | 158,423,182 |
8 | バングラデシュの旗 バングラデシュ | 148,692,131 |
9 | ロシアの旗 ロシア | 142,958,164 |
10 | 日本の旗 日本 | 126,535,920 |
11 | メキシコの旗 メキシコ | 113,423,047 |
変換は、「タブ」と「スペース2文字以上」を区切り文字として変換しています。
空白のセルがたくさんあると、ずれることが多いです。
私のShell技能だとその辺の微調整が少し面倒だったので諦めました。
もう少しちゃんとしたものをPythonとかで作ってもいいかもしれません。
ショートカットキーから実行して、もう少し便利に使う
Macには便利なLauncherやキーボードのショートカットからスクリプトを実行できるツールがたくさんあります。
例えば、 BetterTouchTool(有料ですが) などを使って、F1キー
を押したらこのスクリプトを実行できるようにしておきます(他にも色々方法があると思います)。
すると、「コピー → F1 → ペースト」 でコピペがかなり捗ります。
HTMLの表をコピーするには
HTMLの表を判別してコピーしてくるようなプラグインを使うとできます。
例えば、 Chromeなら copytables というのがあります。
Altキーを押しながらドラッグしてコピーすると、HTMLテーブルがExcelに貼り付けられるような形式でClipboardに入って便利です。
Clipboardに入ったら、同じように F1キーを押すとMarkdownに変換されるので、それをペーストすればOKです。
さいごに
こんなものでも作ってみると意外と便利で使えます。
セル内に改行があったり、HTMLをコピペするときは多少整形しないといけないケースが多かったりするんですが、、、まあ、今回はよしとします。