1

I'm trying to create a my own CSV file using info in a google sheet. The info copies correctly, however any time there is a 0 in a cell, it gets ignored and I get a blank spot in my CSV file. Any suggestions? Code below.

function saveAsCSV() {
var filename = "trainingImport"; // CSV file name 
var folder = "1vzTFeLwwR35XluyE39Uk9mzbLVJHE3XB"; // Folder ID
var sprdSheet = SpreadsheetApp.getActiveSpreadsheet();
var outPut = sprdSheet.getSheetByName("Output");
var range = outPut.getDataRange();
var values = range.getValues();
var csv = "";

for (var i = 0; i < values.length; i++) {
  var row = "";   
  for (var j = 0; j < values.length[i]; j++) {
    if (values[i][j]) {
      row = row + values[i][j];
    }
    if (outPut.getRange((i+1),(j+2)).isBlank()) {
      break;
    }
    row = row + ",";
  }    
  csv += row + " \n";
}

var url = DriveApp.getFolderById(folder)
          .createFile(filename, csv, MimeType.CSV)
          .getDownloadUrl()
          .replace("?e=download&gd=true","");
return url;
}

1 Answers1

0

The problem lies in the if statement just in the inner for loop:

if (values[i][j]) {
  row = row + values[i][j];
}

The statement will be false, if values[i][j] is 0, beacause 0 is falsy.

That means, that when converted to a Boolean, 0 acts like literal false, this also applies to empty strings, null, undefined and NaN.

If you change it to

if (values[i][j] || values[i][j] === 0) {
  row = row + values[i][j];
}

0 will be added to the row.

Luca Kiebel
  • 9,790
  • 7
  • 29
  • 44