google-apps-script - 如果 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 说它等于它的样子,它是否将其视为查询公式?
解决方案
您将无法仅在 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 语句中尝试的值进行比较。
推荐阅读
- c# - 如何更改 ASP.NET MVC 中的默认 URL?
- mysql - 如何在具有嵌套记录的表上编写 SQL 查询?
- java - 如何在 Spring Boot 中从 Oracle DB 中检索 Json
- python - 将文本摘要器的输出写入文件会替换之前的摘要
- arrays - 为什么状态数组的值没有显示在 C 程序的输出中?
- node.js - 无法将数据保存到 mongodb 数据库
- node.js - Youtube评论显示后被删除
- android - Android Native APP 迁移到 Flutter - 现有数据库使用
- android - 将 LocalDate 转换为 Date 以针对 API 21
- python - 键模拟器始终在顶部/前景(tkinter)