0

I found this script (works well) except that I want to skip few columns (i just want to extract column 1,2,3,9) so I have this :

$(document).ready(function(){
    $('button').click(function(){
        var data = $('#txt').val();
        if(data == '') return;

        JSONToCSVConvertor(data, "Agenda", true);
    });
});

function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) {
    //If JSONData is not an object then JSON.parse will parse the JSON string in an Object
    var arrData = typeof JSONData != 'object'
      ? JSON.parse(JSONData)
      : JSONData;

    var CSV = '';
    //Set Report title in first row or line
    CSV += ReportTitle + '\r\n\n';



    //This condition will generate the Label/Header
    if (ShowLabel) {
      var row = "";

      //This loop will extract the label from 1st index of on array
      for (var index = 0; i<arrData.length-1; index++) {
        if (index  == 4 || index == 5 || index == 6 || index == 7 || index == 8) {
          continue;
        }
        else{
          //Now convert each value to string and comma-seprated
          row += index + ';';

        row = row.slice(0, -1);
        //append Label row with line break
        CSV += row + '\r\n';
        }
    }
    //1st loop is to extract each row
    for (var i = 0; i < arrData.length-1; i++) {
      if (i  == 4 || i == 5 || i == 6 || i == 7 || i == 8) {
        continue;
      }
      else{
        var row = "";
      }
      //2nd loop will extract each column and convert it in string comma-seprated
      for (var j = 0; i<arrData.length-1; j++) {
          if (j  == 4 || j == 5 || j == 6 || j == 7 || j == 8) {
            continue;
          }
          else{
            row += '"' + arrData[i][j] + '";';
          }
        }
      }

      row.slice(0, row.length - 1);

      //add a line break after each row
      CSV += row + '\r\n';
    }



    if (CSV == '') {
      alert("Invalid data");
      return;
    }

    //Generate a file name
    var fileName = "Formapelec_";
    //this will remove the blank-spaces from the title and replace it with an underscore
    fileName += ReportTitle.replace(/ /g,"_");

    //Initialize file format you want csv or xls
    var uri = 'data:text/csv;charset=utf-8,' + escape(CSV);

    // Now the little tricky part.
    // you can use either>> window.open(uri);
    // but this will not work in some browsers
    // or you will not get the correct file extension

    //this trick will generate a temp <a /> tag
    var link = document.createElement("a");
    link.href = uri;

    //set the visibility hidden so it will not effect on your web-layout
    link.style = "visibility:hidden";
    link.download = fileName + ".csv";

    //this part will append the anchor tag and remove it after automatic click
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

It's supposed to generate a .csv with just column 1,2,3 & 9 but there's nothing in return. I tried different things with if() {continue} but I either have a return with all the columns or no return at all.

2
  • What is the question here? Commented Dec 13, 2017 at 23:03
  • Please edit the code to provide a test data string in the question. (The logic should parse it to an object). Questions without sufficient detail to reproduce or test a problem may be considered off topic. Check stackoverflow.com/help for help on asking a question. Commented Dec 13, 2017 at 23:56

2 Answers 2

1
for (var i = 0; i < arrData.length-1; i++) {
      //2nd loop will extract each column and convert it in string comma-seprated
      for (var j = 0; j<arrData[i].length; j++) {
          if (j  == 4 || j == 5 || j == 6 || j == 7 || j == 8) {
            continue;
          }
          else{
            row += '"' + arrData[i][j] + '";';
          }
        }
      }

      row.slice(0, row.length - 1);

      //add a line break after each row
      CSV += row + '\r\n';
    }

you skipped rows, your second for was also wrong(incrementing j, but checking i, this would either run for ever or never run

Sign up to request clarification or add additional context in comments.

Comments

0
//1st loop is to extract each row
for (var i = 0; i < arrData.length-1; i++) {
  if (i  == 4 || i == 5 || i == 6 || i == 7 || i == 8) {
    continue;
  }

You are skipping rows too, that if shouln't be there

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.