0

我正在使用谷歌脚本、表格和电子表格编写一个帮助台系统。为了过滤查询,根据类别将提交的内容放入不同的工作表中,这是通过 FILTER 函数完成的。但是每次新提交时,过滤功能不会更新,(它使用 CONTINUE 功能覆盖其他单元格)而是必须选择具有 FILTER 功能的单元格,并且必须输入 crtl+shift+E

有没有解决的办法?我尝试了两种方法,第一种是希望有一个输入快捷方式的功能,但这可能吗?

第二个是每次进行新提交时自动进入继续功能,我有这个工作但是谷歌表格无法识别命名范围,(继续功能设置了CONTINUE(原始单元格,行距,列距)它的它无法识别的原始单元格,而是我必须手动选择单元格并重新编写完全相同的单元格引用。

感谢您的帮助,如果您需要查看我的代码,请询问:)

这是第二个选项的代码,我尝试手动将函数输入到单元格中。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var numEntry = ss.getSheetByName('Home').getRange("B8").getValue() + 2;
var cat = ss.getSheetByName('Software problem').getRange(numEntry, 4, 1, 9);
cat.getCell(1, 1).setValue('=CONTINUE(D2, '+(numEntry-1)+', 1)');
4

1 回答 1

1

您的选项 1:让脚本自动输入击键?在应用程序脚本中不受支持。

您的选项 2:不必以编程方式插入 CONTINUE,因为当过滤器范围内的行与表达的条件匹配时,过滤器所需的 CONTINUE 应该是自动的。还有其他问题,所以不要被这个红鲱鱼赶上。

您提到“谷歌表格无法识别命名范围”-我想知道您的意思,因为我怀疑这就是您的解决方案。您可以在 FILTER 语句中使用命名范围。您还可以使用开放式范围,例如FormInput!A1:XFormInput!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")
于 2012-12-05T04:58:17.573 回答