首页 > 解决方案 > 如果 A1 中的查询 = #REF! , 清除 A2:B+lastrow 范围内的所有单元格

问题描述

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

  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 说它等于它的样子,它是否将其视为查询公式?

标签: google-apps-scriptgoogle-sheets

解决方案


您将无法仅在 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 value和中完成了var formula。然后,您可以使用这些值与您在 if 语句中尝试的值进行比较。


推荐阅读