您的选项 1:让脚本自动输入击键?在应用程序脚本中不受支持。
您的选项 2:不必以编程方式插入 CONTINUE,因为当过滤器范围内的行与表达的条件匹配时,过滤器所需的 CONTINUE 应该是自动的。还有其他问题,所以不要被这个红鲱鱼赶上。
您提到“谷歌表格无法识别命名范围”-我想知道您的意思,因为我怀疑这就是您的解决方案。您可以在 FILTER 语句中使用命名范围。您还可以使用开放式范围,例如FormInput!A1:X
或FormInput!E1:E.
如果您尝试使用脚本操作命名范围,那么您可能遇到了一个已知问题,“ removeNamedRange() 仅删除通过 Apps 脚本创建的命名范围”。(要解决这个问题,请手动删除命名范围,然后仅从脚本创建它。)
这是我用来为工作表上的所有数据创建命名范围的函数。您可以根据自己的情况进行调整。(我将它与 QUERY 函数而不是 FILTER 一起使用,您可能需要考虑将其作为替代方案。)
function setNamedRangeFromSheet(sheetName) {
// Cannot remove a named range that was added via UI - http://code.google.com/p/google-apps-script-issues/issues/detail?id=1041
var ss = SpreadsheetApp.getActiveSpreadsheet();
try { ss.removeNamedRange(sheetName) } catch (error) {};
var sheet = ss.getSheetByName(sheetName);
var range = sheet.getDataRange();
ss.setNamedRange(sheetName,range);
}
使用 FILTER,您需要匹配 sourceArray 的长度(可以是命名范围)和您使用的任何标准数组。要以编程方式为 sourceArray 中的单列条件创建一个命名范围,并且长度相同,请在 sourceArray 范围上使用 getNumRows()。
现在,在表单提交时触发的提交处理函数中,您将拥有类似的内容。(我假设您的故障报告会出现在一张表格中,“FormInput” - 根据需要进行调整。)
...
var ss = SpreadsheetApp.getActiveSpreadsheet();
try { ss.removeNamedRange("FormInput") } catch (error) {};
var sheet = ss.getSheetByName("FormInput");
var inputRange = sheet.getDataRange();
ss.setNamedRange("FormInput",inputRange);
try { ss.removeNamedRange("Criteria") } catch (error) {};
var criteriaCol = 4; // Another guess, that Column E contains our criteria
var criteriaRange = sheet.getRange(0,criteriaCol,inputRange.getNumRows(),1);
ss.setNamedRange("Criteria",criteriaRange);
...
有了这些,“软件问题”表上 A1 的内容只需要包含以下内容。(假设您正在寻找“错误”。):
=FILTER(FormInput,Criteria="Bug")
我之前提到了开放式范围。如果您没有对数据进行足够的操作来证明命名范围的合理性,您可以像这样设置您的过滤器,而不必在新输入进入时更改它:
=FILTER(FormInput!A1:X,FormInput!E1:E="Bug")