Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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;
  }
});

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

yuusuke510
色々勉強中です。
d2cdot
テクノロジーの力で『伝えたいコトを伝わるカタチに』
https://www.d2cdot.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした