data = document.selection.Text.replace(/(\r\n|\r)/g,"\n").split("\n");
l_num = data.length; //行数
c_num = 0;
cl_num = 1; //データの最大行数(1で固定)
cc_num = 0;
l_op = prompt( "線種を選んで下さい(1:普通 2:外枠だけ太く 3:太く)", "1" )-0;
for(var i = 0; i < l_num; i++){
data[i]=data[i].split("\t");
if(data[i].length>c_num) c_num=data[i].length; //最大配列データ数=列数
for(j in data[i]){
if(lenB(data[i][j])>cc_num) cc_num=lenB(data[i][j]);
}
}cc_num = Math.round(cc_num/2)*2; //最大データ長さ
switch(l_op){
case 3 : l="┏━┳┓┃┃┣━╋┫┗┻┛";break; //太く
case 2 : l="┏━┯┓┃│┠─┼┨┗┷┛";break; //外枠だけ太く
default: l="┌─┬┐││├─┼┤└┴┘";break; //普通
}
p_str = c(0) + rep((rep(c(1), cc_num/2) + c(2) ), (c_num-1)/2+1) + rep(c(1), cc_num/2) + c(3) + "\n"; //一番上の部分
MatrMid = c(6) + rep((rep(c(7), cc_num/2) + c(8) ), (c_num-1)/2+1) + rep(c(7), cc_num/2) + c(9) + "\n"; //行の区切り
for(i in data){//データの出力
MatrInt="";
for(j=0;j<c_num;j++){
MatrInt += c(5)+w_spc(data[i][j]);
}
MatrInt = (l_op==2) ? c(4)+MatrInt.substring(1,MatrInt.length)+c(4) : MatrInt+c(5);
p_str+=MatrInt+"\n"+( (i<data.length-1) ? MatrMid : "" ); //最後のデータの時は行の区切りを出力しない
}
p_str += c(10)+ rep((rep(c(1), cc_num/2) + c(11)), (c_num-1)/2+1) + rep(c(1), cc_num/2) + c(12)+ "\n"; //一番下の部分
document.selection.Text = p_str; //出力
/***** function *****/
function c(n){return l.charAt(n);} //指定した罫線を返す(文字数削減のために搭載)
function w_spc(str){return str+rep(" ",cc_num-lenB(str));} //文字の後ろにスペースを詰める(整形のため)
function rep(Chara, N){ //文字列Charaを、N個出力
var arr=Math.round(N-0)+1; //-0はintに変換するため必要
var strArray = new Array(arr);
return strArray.join(Chara);
}
function lenB(str) { //文字のバイト長を返す
var result = str.length;
for(var i = result - 1; i--;)
if(str.charCodeAt(i) >= 256)
result++;
return result;
}
表挿入マクロを元に改造。
選択範囲のデータ(タブ区切り)を表として出力します。
最後に改行が入ってるとundefinedと表示されてしまうのは仕様。
何となくコードが汚いのも仕様。
d_lenが宣言されてません。 byゆー
d_len->l_numに置き換え
v10.0.0で動作しなかったので、EmEditorの公式サイトフォーラムの方に独自に修正したマクロを登録しました。元々の作者様、ありがとうございます。需要があれば幸いです。
