[JavaScript] タブ区切りのExcelデータをxmlにするツール作った

2018/06/15

こんにちは。きんくまです。

以前にAppleScriptを使ってExcelのデータをxmlにするプログラムを書いたのですが、問い合わせをいただきまして。
エラーが出て動かないとのこと。確認したところパーミッション関係のエラーが出てしまっていました。
>> [AppleScript] MacでExcelからUTF-8でxml書き出しをするAppleScript

6年前のプログラムだし、すぐには直せなそうでした。
それでJavaScriptでツールを作った方が早そうなので作ってみました。

作ったもの

>> タブ区切りのExcelデータをxmlにするツール

何するもの?

こういうExcelデータを

こういう感じのxmlに変換します。Excelにもxml書き出しというのがあるんですが、余計なタグがついてくるのであまり使えないのです。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <row>
    <id>001</id>
    <age>15</age>
    <name>田中</name>
    <hobby>野球</hobby>
  </row>
  <row>
    <id>002</id>
    <age>32</age>
    <name>斎藤</name>
    <hobby>サッカー</hobby>
  </row>

   ...以下略

</root>

使い方

Excelを開きます。該当の部分をコピーします。
1行目のタイトル部分がタグ名になるのでそこもコピーしてください。

上のページに移動して、入力欄にペーストします。そのあと、変換ボタンをおします。

出力欄に変換テキストが表示されます。

あとは、クリップボードに転送したり、xmlファイルとしてダウンロードできます。

セル内に改行があると使えないです、、。すみません。
入力されたデータはブラウザ内だけで変換して、サーバーにアップしません。ですので、入力内容は私の方ではわからないのでお気軽にどうぞ。

もしどうしても気になる人がいたら、データ一式をアップしておくので自分の端末内で使ってください。

ファイルをダウンロード(tsv-xml.zip)

案件で必要なテキスト変換ツールは、こんな感じによく作っております。

興味ある人向けソース

JS部分です。jQueryを使っているからって、石を投げないでください。

var spaceText = "  ";
var lineBreak = "\n";

function getInputTSV(){
    return $('#inputTextArea').val();
}

function buildXMLText(arr){
    var tags = arr[0];
    var xmlTexts = [];
    if(arr.length <= 1){
        return "";
    }
    xmlTexts.push( '<?xml version="1.0" encoding="utf-8"?>' + lineBreak );
    xmlTexts.push( "<root>" + lineBreak );
    for(var i = 1; i < arr.length; i++){
        var data = arr[i];
        xmlTexts.push( spaceText + "<row>" + lineBreak );
        data.map(function(datum, index){
            var tag = tags[index];
            xmlTexts.push( spaceText + spaceText + "<" + tag + ">" + datum + "</" + tag + ">" + lineBreak );
        });
        xmlTexts.push( spaceText + "</row>" + lineBreak );
    }
    xmlTexts.push( "</root>" + lineBreak );
    return xmlTexts.join('');
}

function convertTSV(){
    var input = getInputTSV();
    var rows = input.split('\n');
    rows = rows.map(function(row){
        return row.split('\t');
    });
    var xmlText = buildXMLText(rows);
    $('#outputTextArea').val(xmlText);
}

//https://stackoverflow.com/questions/3665115/create-a-file-in-memory-for-user-to-download-not-through-server
function downloadXMLFile(text, filename){
    var id = 'donwloadLink';
    var sharpId = '#' + id;
    $(sharpId).remove();

    $('body').append('<a id="' + id + '"></a>');
    var $link = $(sharpId)
        .attr('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text))
        .attr('download', filename);
    $link.get(0).click();
}

function main(){
    $('#convertButton').click(function(){
        convertTSV();
    });

    $('#toClipboardButton').click(function(){
        $('#outputTextArea').select();
        document.execCommand("copy");
    });

    $('#downloadButton').click(function(){
        var outputText = $('#outputTextArea').val();
        var filename = $('#outputFilename').val();
        downloadXMLFile(outputText, filename);
    });
}

$(function(){
    main();
});
LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る