LoginSignup
18
14

More than 5 years have passed since last update.

Excel からのコピペで Markdown Table を作る

Last updated at Posted at 2019-02-21

Excel からのコピペ = タブ区切り文字列

要はタブ区切りの複数行ある文字列を、
Markdown Tableに変換したいというお話です。

正規表現でやってもいいですが、
エディタが限られるのでWebサービスが理想です。

実はツールが色々あります。

Markdown Tables Generator
HTMLテーブルにも出せるので高機能。
ただ、高機能故に3クリックくらい必要です。

CopyToMarkdownAddIn
.NET Framework 4.5.2を使用されているようなので、
おそらくWindows限定ですが、
Markdown TableExcelにコピペする操作も行えるのが素晴らしいです。

Copy Table in Excel and Paste as a Markdown Table
コピペした瞬間にもう変換済みのMarkdown Tableが表示されてるシンプルさがいいですね。

Excel to Markdown table
こちらはVisual Studio CodeExtensionですが、
私の環境では実行すると command 'extension.excelToMarkdown' not found となって実行できずでした。
インストールは完了しているのになー。。。

簡単そうだったので自前で作ってみました。

Convert tab delimited string to MarkDown table
結構簡単でした。
CodePenで実装したので、
お好みでForkしてカスタマイズしちゃってください。

Code

必要な部分だけ抜き出しで書いてます。

HTML(pug)

pug
    textarea#request
    span ↓
    textarea#response

CSS(sass)

別になんでもいいので割愛

JavaScript(Babel)

javascript
$(document).ready(()=>{
  const INPUT = $('#request');
  const TARGET = $('#response');
  INPUT.on('keydown', (e)=>{
    let el, current, end, start, val;
    if (e.keyCode === 9) {
      if (e.preventDefault) {
        e.preventDefault();
      }
      el = e.target;
      current = el.selectionStart;
      start   = el.value.substr( 0, current );
      end     = el.value.substr( current, el.value.length );
      el.value = start + "\t" + end;
      el.selectionEnd = current + 1;
      return false;
    }
  });
  INPUT.on('keyup', (e)=>{
    TARGET.val('');
    let str = INPUT.val();
    const FIRST = str.split(/[\r\n]+/)[0];
    const COUNT = FIRST.split(/\t/).length - 1;
    let arr = [];
    if(str.length > 0){
      str = str.replace(/\t/g, ' | ');
      str = str.replace(/([\r\n]+)/g, ' |$1');
      str = str.replace(/(^)/gm, '| $1');
      str = str + ' |';
      arr = str.split(/[\r\n]+/g);
      for(let [i,v] of arr.entries()){
        if(i === 0){
          str = v + "\n";
        } else if(i === 1){
          str = str + generateHeader(COUNT) + v + "\n";
        } else {
          str = str + v + "\n";
        }
      }
    }
    TARGET.val(str);
  });
  const generateHeader = (cnt) => {
    let str = '';
    str = str + '| ---';
    for(let i=0; i<cnt; i++){
      str = str + ' | ---';
    }
    str = str + ' |\n';
    return str;
  }
});

結構な雑コードですみません(>人<)

18
14
4

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
18
14