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の公式サイトフォーラムの方に独自に修正したマクロを登録しました。元々の作者様、ありがとうございます。需要があれば幸いです。