首页 > 解决方案 > 模拟获取过滤条件 - 错误 | Google Apps 脚本

问题描述

我有一个功能,其中一位用户建议获取内置谷歌表格过滤器的标准。我不知道我是否做得对,但是当我将getVisibleValues()函数粘贴到单元格时出现错误:

TypeError:无法读取未定义的属性“getColumnFilterCriteria”(第 18 行)

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

标签: google-apps-scriptgoogle-sheetsfilter

解决方案


解释:

您的目标是将您的代码用作自定义函数,以便将其用作工作表中的公式。

解决方案:

确保列C包含过滤器并且此公式适用于工作表Test1。将这些更改为您的需要或使用:

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

如果您想获得活动工作表。

function test_getVisibleValues(rng) {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    const range = sheet.getRange(rng);
    const filter = range.getFilter();
    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));
}

您现在可以test_getVisibleValues("C2:C")在工作表中作为公式应用,但C2:C需要在引号内:

在此处输入图像描述


推荐阅读