LoginSignup
10
8

More than 5 years have passed since last update.

MacでExcelやTSVやHTMLのテーブルを簡単にMarkdownのテーブルに変換する小技

Posted at

はじめに

ExcelやHTMLのテーブルをMarkdownとして貼り付けたいときがしばしばあると思います。Web上の便利ツールでそういうものがありますが、毎回ブラウザにコピペしたりボタンをクリックするのがやや煩わしいです。

そこで

  1. データをコピー
  2. F1キー or コマンド実行
  3. Markdownのテーブルとしてペースト

できるようにしてみます。

この技は pbcopy pbpaste というクリップボードにデータを読み書きする(たぶん)Macにしかないコマンドを使っているので、このままだとMac専用技ですが、そこさえなんとかなれば当然他の環境でもできることになります。

方法

変換スクリプトの設置

以下のようなスクリプトを 適当な場所に作ります。
今回は /Users/mokemokechicken/util/clipboard_tsv_to_markdown_table においたとします。

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をコピペするときは多少整形しないといけないケースが多かったりするんですが、、、まあ、今回はよしとします。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8