如何使用 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
}
}
您知道为什么 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
}
}