【问题标题】:How to ignore empty cells when using set.Values() from .getValues()使用 .getValues() 中的 set.Values() 时如何忽略空单元格
【发布时间】:2019-07-17 23:27:11
【问题描述】:

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

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

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    问题:

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


    修改:

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

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

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


    参考资料:

    【讨论】:

    • 嘿,谢谢。我收到一个错误 .setValues(plakatMenge[komulierer]); “无法将数组转换为对象[][]”对不起,如果这很明显,我还在学习。
    • 对此感到抱歉-我已经更新了答案的那部分。您可以查看并重试吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多