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

How to return getVisibleValues() with Google Apps Script?

您知道为什么 getVisibleValues() 函数没有 return 任何值吗?我想获得一个过滤条件,例如在这种情况下(屏幕截图)我想获得 'A' 值。我试过 getCriteriaValues() , getValues() 也不管用。它没有 return 任何值。只有 getHiddenValues() 函数有效并且 returns "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);
  
}

这似乎是一个错误。您可以在 Issue Tracker.

中报告

目前不支持此方法:

请参阅问题 159051708

Status: Won't Fix (Intended Behavior) Hello,

Unfortunately those methods are not currently supported. As you try to use them in your script you will see an Exception message:

Visible values are not currently supported. As an alternative specify a list of hidden values that excludes the values that should be visible.

Hidden values are supported.

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

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));
}

我想这样做:

  • 先获取所有的值
  • 然后过滤掉空的和不唯一的
  • 然后从中过滤掉隐藏值

你知道怎么做吗?

function getcriteria() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test1")
var range = sheet.getRange('C2:C');

//get hidden values
var filter = range.getFilter();
var hiddenValues = filter.getColumnFilterCriteria(3).getHiddenValues();

//get all values, filter blank
var all = range.getValues().filter(String);

//filter unique 
var allUnique = 

//filter allUnique - hiddenValues
var filtered = 
      }

function getFilterValues(filter, range) {
  const filterCriteria = filter.getColumnFilterCriteria(range.getColumn());
  const hiddenValues = filterCriteria.getHiddenValues();
  const allValues = range.getValues().slice(1).flat().map(value => value.toString());
  const uniqueValues = Array.from(new Set(allValues));  
  var visibleValues = uniqueValues.filter(value => !hiddenValues.includes(value));
  return {
    'visibleValues':visibleValues,
    'hiddenValues':hiddenValues,
    'uniqueValues':uniqueValues
  }
}