如果A1中的查询= #REF! ,清除范围A2:B + lastrow中的所有单元格

时间:2019-05-20 06:25:09

标签: google-apps-script google-sheets

我在单元格A1中有一个查询,该查询正在获取信息并将其显示在其他电子表格中。当有人在查询显示的范围内键入任何内容时,它将给出#REF!因此,我考虑过要制定一个if标准,以清除if('A1' == '#REF!')范围内的所有单元格,但似乎不起作用。我还进行了设置,以便如果A1!='查询公式'将其设置为'查询公式'

  var queryString = '=Query(ImportRange("Spreadsheetid","\'Sheet1\'!A1:Z1000"),"SELECT Col1, Col2 WHERE Col1 != \'\' Order By Col1",1)'
  var lastRow = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getLastRow()
  Logger.log(getValue('A1'))///it says it's #REF!
   if('A1' == '#REF!'){
     SpreadsheetApp.getActiveSpreadsheet().getRange('A2:B'+lastRow).clear({contentsOnly: true});
}
if('A1' != queryString){
    setValue('A1',queryString)
}

在对其进行测试时,似乎主要的问题是if条件。它不是将其视为#REF!吗?即使logger.log说它等于看起来,它是否仍将其视为查询公式?

2 个答案:

答案 0 :(得分:0)

您将不能仅在if语句中使用“ A1”来检查单元格。尝试单独定义它,然后检查您的变量,例如:

function replaceRef() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('SHEET_NAME'); //enter sheet name here

  var value = sh.getRange('A1').getValue();
  var formula =  sh.getRange('A1').getFormula();
  var queryString = '=Query(ImportRange("Spreadsheetid","\'Sheet1\'!A1:Z1000"),"SELECT Col1, Col2 WHERE Col1 != \'\' Order By Col1",1)';
  var lastRow = sh.getLastRow();

  if (value == '#REF!') {
    sh.getRange('A2:B'+lastRow).clear({contentsOnly: true});
  }
  if (formula != queryString) {
    sh.getRange(1, 1).setFormula(queryString); //get cell A1 and set formula
  }
}

如您所见,我进行了一些更改。主要的是将要检查的值定义为变量,这在var valuevar formula中已经完成。然后,您可以使用它们与if语句中尝试的值进行比较。

答案 1 :(得分:0)

如果您愿意运行脚本,那么我根本不明白为什么需要ifs。

var queryString = 
'=Query(ImportRange("Spreadsheetid","\'Sheet1\'!A1:Z1000"),"SELECT Col1, Col2 WHERE Col1 != \'\' Order By Col1",1)';
             SpreadsheetApp.getActiveSpreadsheet().getRange('A2:B'+lastRow).clear({contentsOnly: true});
    SpreadsheetApp.getActiveSpreadsheet().getRange("a1").setValue(queryString);

如果您担心人们对此范围感到担心,我也将考虑保护该范围。