Googleスプレッドシートから改行付きセル内容を範囲コピペすると以下の様なエセccvのテキストデータが得られる

改行付きCSVを整形してJSONxにし、更にKeyValueをテンプレートに落としこむ

JavaScript

$(function(){
  csv2json2tmpl();
  $('button').on('click', function(){
    csv2json2tmpl();
  });
});


var csv2json2tmpl = function(){

  var csv = $('#csv').val();
  csv = fixBreakCSV(csv);
  var json = csv2json(csv);
  $('#json').val(JSON.stringify(json, null ,2));
  var template = $('#template').val();
  var result = json2tmpl(json, template);
  console.log(result);
  $('#templateResult').val(result);
}

//JSONをテンプレートに
var json2tmpl = function(json, template){
  var result = '';
  json.forEach(function(obj){
    result += template.replace(/\$\{([^}]*)\}/g, function(){
     //console.log(arguments[1]);
      return obj[arguments[1]] || '';
    });
  });
  return result;
}


//CSVをJSONに
var csv2json = function(csv){
  var lines = csv.split('\n');
  var keys = lines.shift().split(',');
  var json = [];
  lines.forEach(function(line){
    if(!line){return;}
    var hash = {};
    var rows = line.split(',');
    rows.forEach(function(col, i){
      col = col.replace(/\\n/g, '\n');
      hash[keys[i]] = col;
    });
    json.push(hash);
  });
  console.log(json);
  return json;
}


//改行付き文字列(ダブルクオーテーション付き)を整形
var fixBreakCSV = function(csv){
  var new_csv = '';
  var escapeNum = 0;
  var isQuat = false;
  var charList = csv.split('');
  charList.forEach(function(char){
    if(char === '\\'){
      escapeNum = 2;
    }
    escapeNum--;
    if(char === '"' && escapeNum < 0){
      isQuat = !isQuat;
      return;
    }
    if(isQuat && char === '\n'){
      console.log(char);
      char = '\\n';
    }
    new_csv += char;
  });
  new_csv = new_csv.replace(/\\"/g, '"');
  return new_csv;
}

CSS