【问题标题】:How to correctly skip setValue if value is null如果值为空,如何正确跳过 setValue
【发布时间】:2020-01-10 15:00:59
【问题描述】:

我想从一张纸的特定行中读出值,然后将它们插入到另一张纸的下方。问题是,如果一个单元格是空的,我显然不想在新工作表的最后一个值下面插入一个空值。我所做的是以下循环:

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++;
    }
  }
}

【问题讨论】:

  • plakatMenge 很可能是“”以外的值。也许尝试控制台记录该值,看看它是否可能是nullundefined
  • 你几乎拥有它。您正在检查空字符串,将其扩展为:|| ... === null ?
  • if(plakatMenge === ""){ 行更改为if(!plakatMenge){
  • 问题是 === 必须是 ==。谢谢大家

标签: javascript google-apps-script google-sheets setvalue


【解决方案1】:
if(plakatMenge === ""){
            continue;
      }

这个块没有执行,因为你在做严格的类型检查。 尝试使用 == 而不是 ===。我希望它会工作。

【讨论】:

  • 成功了!哦,我的上帝,我不敢相信这是这么“容易”解决的问题。谢谢
【解决方案2】:

你需要在这里过滤空白,我会这样做:

plakatMenge = plakatMenge.filter( function(_platkaMenge) {
return _platkaMenge[0] !== undefined
})

【讨论】:

  • 不是真的,我一直在我的谷歌应用脚​​本中使用它们
  • raphael @ruben 指的是箭头函数,而不是数组函数
  • 哈哈,是的,他就在那里,让我解决这个问题,哈哈,我已经习惯了用 ES6 编写并使用 babel 编译。
  • 很抱歉给您带来了困惑 :)
【解决方案3】:

在这一行

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

使用getValue() 而不是getValues(),因为后者返回一个数组数组(二维数组/多维数组),但ppt2019.getRange(row, 3 + i) 只得到一个单元格。

那么您可以使用 ===,因为 Google Apps 脚本会返回一个空字符串作为空白(空)单元格的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2013-07-01
    • 2014-12-12
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多