1 件の投稿を表示中 (合計 2 個)
  • 作成者
    投稿
  • #9693
    1da2
    メンバー

    が、Version 10.0.0で動作しなかったので修正しました。
    ※メンテしやすいように大幅に変更してしまいましたが。。

    Vistaの64ビット、7の32bitで動作確認をしました。

    元々の作者さま、ありがとうございます。

    var lines = document.selection.Text.replace(/(rn|r)/g,”n”).split(“n”);
    var l_num = lines.length; //行数
    var c_num = 0; //列数
    var cc_num = new Array(); //各列の最大バイト数

    for(var i = 0; i =lines.split(“t”);
    if(lines
    .length>c_num){
    c_num=lines
    .length;
    }

    //各列の最大文字数を計算
    for(var j = 0; j.length;j++){
    var cell_bytenum=lenB(lines
    [j]);
    if (!cc_num[j]){ //未定義用処理
    cc_num[j]=0;
    }
    if(cell_bytenum>cc_num[j]){
    cc_num[j]=cell_bytenum;
    }
    }
    }

    //罫線が2byte文字なので、各列の文字バイト数を2byteに揃える
    for ( var i in cc_num){
    cc_num = Math.round(cc_num/2)*2;
    }

    l_op = prompt( “線種を選んで下さい(1:普通 2:外枠だけ太く 3:太く)”, “1” ) – 0;

    switch(l_op){
    case 3 : l=”┏━┳┓┃┃┣━╋┫┗┻┛”;break; //太く
    case 2 : l=”┏━┯┓┃│┠─┼┨┗┷┛”;break; //外枠だけ太く
    default: l=”┌─┬┐││├─┼┤└┴┘”;break; //普通
    }

    //先頭行、区切り行、終端行の作成
    p_str = c(0);
    MatrMid = c(6);
    MatrEnd = c(10);

    for (var i=0; i/2; j++){
    p_str += c(1);
    MatrMid += c(7);
    MatrEnd += c(1);
    }
    if (i != cc_num.length -1){
    p_str += c(2);
    MatrMid += c(8);
    MatrEnd += c(11);
    }else{
    p_str += c(3);
    MatrMid += c(9);
    MatrEnd += c(12);
    }
    }
    //終端行以外は、改行を追加
    p_str += “n”;
    MatrMid += “n”;

    //データ行の作成
    for(i in lines){
    MatrInt=c(4);
    for(var j=0;j[j]){
    MatrInt += lines
    [j];
    }
    if (lenB(lines
    [j]) != cc_num[j]){
    for (var k=0; k[j]))/1; k++){
    MatrInt += ” “;
    }
    }
    if (j!=c_num-1){
    MatrInt += c(5);
    }else{
    MatrInt += c(4);
    }
    }
    p_str+=MatrInt+”n”;

    //最後の行以外は区切り行を追加
    if (i != lines.length -1 ){
    p_str+=MatrMid;
    }
    }

    p_str += MatrEnd;

    document.selection.Text = p_str; //出力

    /***** function *****/
    function c(n){return l.charAt(n);} //指定した罫線を返す(文字数削減のために搭載)

    function lenB(str) { //文字のバイト長を返す
    if (str){//未定義用処理
    var result = 0;
    for(var i = 0; i = 256){
    result+=2;
    }else{
    result++;
    }
    }
    return result;
    }
    return 0;
    }

    #10022
    1da2
    メンバー

    SNOWさんが効率化をしてくださいました。
    ありがとうございます。

    var lines = document.selection.Text.replace(/(rn|r)/g, “n”).split(“n”);
    var l_num = lines.length; //行数
    var c_num = 0; //列数
    var cc_num = []; //各列の最大バイト数

    for (var i = 0; i c_num) {
    c_num = ln.length;
    }

    //各列の最大文字数を計算
    for(var j = 0, n = ln.length; j (cc_num[j] || 0)) {
    cc_num[j] = cell_bytenum;
    }
    }
    }

    var l_op = prompt( “線種を選んで下さい(1:普通 2:外枠だけ太く 3:太く)”, “1” ) – 0;

    switch (l_op) {
    case 3 : var c = “┏━┳┓┃┃┣━╋┫┗┻┛”.split(“”); break; //太く
    case 2 : var c = “┏━┯┓┃│┠─┼┨┗┷┛”.split(“”); break; //外枠だけ太く
    default: var c = “┌─┬┐││├─┼┤└┴┘”.split(“”); break; //普通
    }

    //先頭行、区切り行、終端行の作成
    var p_str = c[0];
    var MatrMid = c[6];
    var MatrEnd = c[10];

    for (var i = 0, n = cc_num.length; i < n; i++) {
    for (var j = 0, m = cc_num / 2; j < m; j++) {
    p_str += c[1];
    MatrMid += c[7];
    MatrEnd += c[1];
    }
    if (i != cc_num.length -1) {
    p_str += c[2];
    MatrMid += c[8];
    MatrEnd += c[11];
    } else {
    p_str += c[3];
    MatrMid += c[9];
    MatrEnd += c[12];
    }
    }

    //終端行以外は、改行を追加
    p_str += "rn";
    MatrMid += "rn";

    //データ行の作成
    for (i in lines) {
    var ln = lines;
    var MatrInt = c[4];
    for (var j = 0; j < c_num; j++) {
    MatrInt += ln[j] || "";
    for (var k = 0, n = cc_num[j] – lenB(ln[j]); k < n; k++) {
    MatrInt += " ";
    }
    MatrInt += c[(j != c_num – 1) ? 5 : 4];
    }
    p_str += MatrInt + "rn";

    //最後の行以外は区切り行を追加
    p_str += (i != lines.length -1) ? MatrMid : MatrEnd;
    }

    document.selection.Text = p_str; //出力

    /***** function *****/
    function lenB(str) { //文字のバイト長を返す
    if (!str) {
    return 0; //未定義用処理
    }

    var result = 0;
    for (var i = 0, n = str.length; i = 256) ? 2 : 1;
    }
    return result;
    }

1 件の投稿を表示中 (合計 2 個)
  • フォーラム ‘マクロのサンプル’ には新しいトピックや返信を追加できません。