<textarea id="editor" placeholder="Makdoun変換対応"></textarea><br>
<textarea placeholder="非対応"></textarea>
textarea {
	width: 400px;
	height: 200px;
}
//https://github.com/jonmagic/copy-excel-paste-markdown
//MIT

var editor = document.getElementById("editor");

function columnWidth(rows, columnIndex) {
	return Math.max.apply(
		null,
		rows.map(function (row) {
			return row[columnIndex].length;
		})
	);
}

function looksLikeTable(data) {
	return true;
}

editor.addEventListener("paste", function (event) {
	var clipboard = event.clipboardData;
	var data = clipboard.getData("text/plain").trim();

	if (looksLikeTable(data)) {
		event.preventDefault();
	} else {
		return;
	}

	var rows = data.split(/[\n\u0085\u2028\u2029]|\r\n?/g).map(function (row) {
		console.log(row);
		return row.split("\t");
	});
	var columnWidths = rows[0].map(function (column, columnIndex) {
		return columnWidth(rows, columnIndex);
	});
	var markdownRows = rows.map(function (row, rowIndex) {
		// | Name         | Title | Email Address  |
		// |--------------|-------|----------------|
		// | Jane Atler   | CEO   | jane@acme.com  |
		// | John Doherty | CTO   | john@acme.com  |
		// | Sally Smith  | CFO   | sally@acme.com |
		return (
			"| " +
			row
				.map(function (column, index) {
					return column + Array(columnWidths[index] - column.length + 1).join(" ");
				})
				.join(" | ") +
			" |"
		);
		row.map;
	});
	markdownRows.splice(
		1,
		0,
		"|" +
			columnWidths
				.map(function (width, index) {
					return Array(columnWidths[index] + 3).join("-");
				})
				.join("|") +
			"|"
	);

	// https://www.w3.org/TR/clipboard-apis/#the-paste-action
	// When pasting, the drag data store mode flag is read-only, hence calling
	// setData() from a paste event handler will not modify the data that is
	// inserted, and not modify the data on the clipboard.

	event.target.value = markdownRows.join("\n");
	return false;
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.