从.getValues()使用set.Values()时如何忽略空单元格

时间:2019-07-17 14:10:47

标签: google-apps-script google-sheets

我编写了一个脚本,该脚本从用户指定的行中获取所有值。然后,将这些值填写到新的工作表中,然后自动向下一行以设置下一个值。但是,有些单元格是空的,我想忽略它们。目前,我的脚本每次写入一个值时都会下一行,但是对于空值也是如此。

function tourzettelV4() {

  var app = SpreadsheetApp.getActive();
  var ppt2019 = app.getSheetByName("PlakatTool2019");

  // Abfragen aus welcher Zeile der Tourzettel generiert werden soll
  // Asking which row to use

  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 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();

    // Loop mit if value empty repeat loop, else set value

 var checkCol = 3;
 var mengeZeile = 4;

  for(var komulierer = 0; komulierer < lastCol - 3; komulierer++){
    var plakatMenge = ppt2019.getRange(row, 3 + komulierer, checkCol + komulierer, row).getValues();


    if(plakatMenge === ""){
          }
//this is where I want to just repeat the loop in case a cell is empty

    else {

    newSheet.getRange(mengeZeile, 3).setValue(plakatMenge);
    mengeZeile = mengeZeile + 1;
    }
  }  
}

我摆弄了.isBLank(),它没有用,我尝试使用if else语句,这样,如果一个值是空的,它将重新启动循环,并且只有当它不为空时才设置该值,没用。

所以现在看起来像这样:

EMPTY
10
EMPTY
EMPTY
20

但是我需要这样:

10
20

1 个答案:

答案 0 :(得分:0)

问题:

您的if语句引用的是 WHOLE 数组,而不仅仅是单个对象。这就是为什么它总是返回true并设置所有值的原因。


修改:

if (plakatMenge[komulierer][0]) {
  newSheet.getRange(mengeZeile, 3).setValue(plakatMenge[komulierer][0]);
  mengeZeile = mengeZeile + 1;
}

if语句现在检查数组该行中的第一个对象是否不为空,然后将找到的行写到工作表中。

使用此脚本意味着您可以摆脱if else,而只需使用if语句即可。


参考文献: