setValue在范围内,如果没有在其他范围内

时间:2018-10-01 00:12:30

标签: google-apps-script google-sheets

在Google Spreadsheet中,我使用脚本编辑器在X2:D5之间的一列中插入Xpath。

function untitle() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getRange('D2:D5');
  var cell = '=IMPORTXML(C2, "/html/body/div[2]")'; 
  range.setValue(cell);
};

C2包含网站的地址。

我想在E2:E5之间进行同样的思考,如果单元格D2:D5中什么都没有

我该怎么办?

编辑我:

我将代码与xpath一起使用以获取D2:D5中的信息

如果代码获得#N / A(或什么都没有),我在E2:E5中使用第二个xpath

简而言之,我只想在D行中什么也没得到的情况下使用第二个xpath。

现在,所以我使用下面的代码,但是它检查了所有内容,所以效果不好。

function untitle() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getRange('D2:D5');
  var range2 = sheet.getRange('E2:E5');
  var cell = '=IMPORTXML(C2, "/html/body/div[2]")'; 
  var cell2 = '=IMPORTXML(C2, "/html/body/div[3]")';
  range.setValue(cell);
  range2.setValue(cell2);
};

我想使用两个功能。

  • 首先在D2:D5中获取信息
  • 第二,如果在D2:D5中结果为空(#N / A),则在E2:E5中获取信息

1 个答案:

答案 0 :(得分:1)

  • 如果“ D2:D5”的单元格具有值和/或公式,则要将公式放入“ D2:D5”。
  • 如果“ D2:D5”的单元格中没有值和/或公式,则要将公式置于“ E2:E5”。

如果我对您的问题的理解是正确的,那么此修改如何?我认为您的情况有几个答案。因此,请将此视为其中之一。

流量:

修改后的脚本的流程如下。

  1. 从“ D2:D5”单元格中检索值和公式。
  2. 如果单元格中有值或公式,请将公式放入“ D2:D5”。
  3. 如果单元格中没有值或公式,请使用offset()将公式放入“ E2:E5”。

修改后的脚本:

请进行如下修改。

从:
range.setValue(cell);
至:
var values = range.getValues().some(function(e) {return e[0]});
var formulas = range.getFormulas().some(function(e) {return e[0]});
if (values || formulas) {
  range.setValue(cell);
} else {
  range.offset(0, 1).setValue(cell);
}

注意:

  • 如果要在“ D2:D5”中只有公式的情况下将公式放入“ E2:E5”,请从脚本中删除formulas

参考文献:

如果我误解了您的问题,请告诉我。我想修改它。

已添加:

  1. cell的公式放入“ D2:D5”。
  2. 检索公式的结果。
  3. 从检索到的结果中将cell2的公式放入“ E2:E5”。
    • var cell2 = '=IMPORTXML(C2, "/html/body/div[3]")';
    • 在这种情况下,当“ D2:D5”的结果为"#N/A"""时,请输入公式cell2

如果我对您想要的内容的理解是正确的,那么修改后的脚本怎么样?该脚本反映了以上流程。

修改后的脚本:

function untitle() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getRange('D2:D5');
  var range2 = sheet.getRange('E2:E5');
  var cell = '=IMPORTXML(C2, "/html/body/div[2]")';
  range.setFormula(cell);

  var values;
  while (r != 4) {
    values = range.getValues();
    var r = values.filter(function(e) {return e[0]}).length;
  }
  var res = values.map(function(e, i) {return e[0] == "#N/A" || e[0] == "" ? ['=IMPORTXML(C' + (i + 2) + ', "/html/body/div[3]")'] : [""]});
  range2.setFormulas(res);
}