我在单元格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说它等于看起来,它是否仍将其视为查询公式?
答案 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 value
和var 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);
如果您担心人们对此范围感到担心,我也将考虑保护该范围。