Как правильно пропустить setValue, если значение равно нулю - PullRequest
0 голосов
/ 10 января 2020

Я хочу считать значения из указанной строки c на одном листе и вставить их в другой лист под друг другом. Проблема в том, что если ячейка пуста, я, очевидно, не хочу вставлять пустое значение под последним значением на новом листе. Я сделал следующее: l oop:

var lastCol = ppt2019.getLastColumn();
var row = SpreadsheetApp.getUi().prompt(
    'Enter row to read out values from'
).getResponseText();     
var row2 = 4;

for (var i = 0; i <= lastCol - 3; i++) {
    var plakatMenge = ppt2019.getRange(row, 3 + i).getValues();
    if (plakatMenge === "") {
        continue;
    }
    else {
        newSheet.getRange(row2, 3).setValue(plakatMenge);
        row2++;
    }
}

Он считывает значения и помещает их в правильный столбец и начальную строку, но вместо того, чтобы просто перейти к setValues в этой ячейке, если прочитанное значение пусто, оно все еще вставляет пустое значение. Это должно выглядеть так:

Values
10
10
20
30
10

, но выглядит так:

Values

10



10

20



30
10

Для сравнения приведу полный скрипт (я не программист, поэтому не прошу не судите об отсутствии формы)

function tourzettelV4() {      
  var app = SpreadsheetApp.getActive();
  var ppt2019 = app.getSheetByName("PlakatTool2019");      
  var row = SpreadsheetApp.getUi().prompt(
    'Gib die Zeile mit dem Datum für die Tour ein'
  ).getResponseText();

  var dateTour = ppt2019.getRange(row, 1).getValue();

  var makeNewSheet = app.getSheetByName("Tour " + dateTour);
  if (makeNewSheet != null) {
    app.deleteSheet(makeNewSheet);
  }
  makeNewSheet = app.insertSheet();
  makeNewSheet.setName("TourzettelV2");

  var newSheet = app.getSheetByName("TourzettelV2")
  newSheet.getRange(1, 1).setValue(dateTour);
  newSheet.getRange(1, 2).setValue("Gebiet:");
  newSheet.getRange(3, 1).setValue("Was");
  newSheet.getRange(3, 2).setValue("Format");
  newSheet.getRange(3, 3).setValue("Menge");
  newSheet.getRange(3, 4).setValue("Info");  

  var lastCol = ppt2019.getLastColumn();

  var checkCol = 3;
  var row2 = 4;

  for (var i = 0; i <= lastCol - 3; i++) {
    var plakatMenge = ppt2019.getRange(row, 3 + i).getValues();
    if (plakatMenge === ""){
      continue;
    }
    else {
      newSheet.getRange(row2, 3).setValue(plakatMenge);
      row2++;
    }
  }
}

Ответы [ 3 ]

1 голос
/ 12 января 2020

Вам нужно отфильтровать пробелы, вот как я бы это сделал:

plakatMenge = plakatMenge.filter( function(_platkaMenge) {
return _platkaMenge[0] !== undefined
})
1 голос
/ 10 января 2020
if(plakatMenge === ""){
            continue;
      }

Этот блок не выполняется, потому что вы выполняете строгую проверку типов. попробуйте, используя == вместо ===. Я надеюсь, что это сработает.

0 голосов
/ 12 января 2020

В этой строке

var plakatMenge = ppt2019.getRange(row, 3 + i).getValues();

используйте getValue() вместо getValues(), так как последний возвращает массив массивов (двумерный массив / многомерный массив), но ppt2019.getRange(row, 3 + i) получает только одну ячейку .

Тогда вы можете использовать ===, потому что Google Apps Script возвращает пустую строку в качестве значения пустых (пустых) ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...