Skip to content

Instantly share code, notes, and snippets.

@kemsakurai
Last active January 5, 2022 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kemsakurai/a4b2f1d98bd63fbb656697ca02b53251 to your computer and use it in GitHub Desktop.
Save kemsakurai/a4b2f1d98bd63fbb656697ca02b53251 to your computer and use it in GitHub Desktop.
Spreadsheet のセルの値(TSV)を、Redmineのチケットのdescription欄の記載内容っぽくクリップボードに貼り付けるユーザースクリプト
// ==UserScript==
// @name TSV to Redmine Ticket description
// @namespace         http://tampermonkey.net/
// @version 0.1
// @author K.Sakurai
// @resource   CSS1 https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css
// @require https://cdn.jsdelivr.net/npm/toastify-js
// @match http*://*/*
// @run-at context-menu
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_setClipboard
// ==/UserScript==
(function() {
'use strict';
// CSS読み込み
GM_addStyle(GM_getResourceText('CSS1'));
var value = window.prompt("SpreadSheet の値を変換");
if (value == null || value == "") {
return;
}
var result = convertSheetValueToMarkdownTable(value);
copyToClipBoardFrom(result);
noticeMessage("texttile形式に変換しました");
// クリップボードにコピーする
function copyToClipBoardFrom(text) {
GM_setClipboard(text);
}
// メッセージ通知
function noticeMessage(text) {
Toastify({
text: text,
duration: 3000,
gravity: "bottom", // `top` or `bottom`
position: 'right', // `left`, `center` or `right`
}).showToast();
}
function convertSheetValueToMarkdownTable(str) {
var rows = str.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 phrases = new Array();
console.log(columnWidths);
for (var i = 0; i < rows.length; i ++) {
if (i == 0) {
continue;
}
for (var j = 0; j< rows[i].length; j++) {
phrases.push("h3. "+ rows[0][j]);
phrases.push(rows[i][j]);
}
phrases.push("----------------------------------");
}
return phrases.join("\n\n");
function columnWidth(rows, columnIndex) {
return Math.max.apply(null, rows.map(function(row) {
return row[columnIndex].length
}))
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment