如何使用 Google Apps 脚本返回 getVisibleValues()?

AdO*_*One 5 filtering google-sheets google-apps-script

您知道为什么该getVisibleValues()函数不返回任何值吗?我想获得一个过滤标准,例如在本例中(屏幕截图)我想获得“A”值。我试过了getCriteriaValues()getValues()也行不通。它不会返回任何值。只有该getHiddenValues()函数有效并正确返回“B、C、D”。

截屏

function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test1');
var filter = sheet.getRange('A1:C').getFilter();
  var values = filter.getColumnFilterCriteria(3).getVisibleValues();
  
  Logger.log(values);
  
}
Run Code Online (Sandbox Code Playgroud)

Die*_*ego 6

这似乎是一个错误。您可以在问题跟踪器中报告。

目前不支持该方法:

请参阅问题159051708

状态:不会修复(预期行为)

不幸的是,目前不支持这些方法。当您尝试在脚本中使用它们时,您将看到一条异常消息:

目前不支持可见值。作为替代方案,指定隐藏值列表,其中排除应可见的值。

支持隐藏值。

您可以创建一个单独的函数来模拟这一点:

function test_getVisibleValues() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test1");
  const columnRange = sheet.getRange("C2:C");
  const filter = columnRange.getFilter();
  const visibleValues = getVisibleValues(filter, columnRange);
  console.log(visibleValues);
}

/**
 * Returns the values to show.
 * Simulates https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria#getvisiblevalues
 * @param {Filter} filter
 * @param {Range} range
 * @returns {string[]}
 */
function getVisibleValues(filter, range) {
  const filterCriteria = filter.getColumnFilterCriteria(range.getColumn());
  const hiddenValues = filterCriteria.getHiddenValues();
  const allNonBlankValues = range.getValues().filter(String);
  const uniqueValues = Array.from(new Set(allNonBlankValues));
      
  // filter unique values that aren't hidden
  return uniqueValues.flat().filter(value => !hiddenValues.includes(value));
}
Run Code Online (Sandbox Code Playgroud)