【问题标题】:Only get non-filtered values for Google App Script getRange using isRowHiddenByFilter or isRowHiddenByUser仅使用 isRowHiddenByFilter 或 isRowHiddenByUser 获取 Google App Script getRange 的未过滤值
【发布时间】:2020-04-20 05:03:43
【问题描述】:

我还很新,正在尝试做与Only get non-filtered values for Google App Script getRange 相同的事情 - 在不使用添加列的情况下获取所有未隐藏的行。使其通用,以便无论使用哪些字段来隐藏行,我只会对非隐藏行进行操作。我一直在玩 isRowHiddenByFilter() 和 isRowHiddenByUser() 但没有得到它。要获取所有未过滤的行,我是否需要检查 isRowHiddenByFilter() 和 isRowHiddenByUser() 是否都为假?

似乎上面的内容应该适用于(不确定如何指定 NOT):

  for(var i=0;i<range.length;i++){
   if (NOT range.isRowHiddenByFilter){
    filter.push(range[i][0])
  }}

【问题讨论】:

  • NOT!

标签: javascript google-apps-script google-sheets


【解决方案1】:

流程:

示例脚本:

const getVisibleValues_ = (shtName, rngString, sheet, range) => {
  sheet = sheet || SpreadsheetApp.getActive().getSheetByName(shtName);
  return (range || sheet
    .getRange(rngString))
    .getValues()
    .filter(
      (_, rowIdx) =>
        !sheet.isRowHiddenByFilter(rowIdx + 1) &&
        !sheet.isRowHiddenByUser(rowIdx + 1)
    );
};

const test1 = () => console.info(getVisibleValues_('Sheet1', 'B1:B70'));

【讨论】:

  • 这看起来不错 - 我正在消化,有点麻烦。与我熟知的 VBA 相比,JavaScript 非常令人困惑。你如何传递诸如表格之类的参数?返回什么类型?
  • @user363 test1 展示了如何将工作表作为字符串传递。它返回一个二维数组
  • 我不明白。我无法调用该函数。我的工作表和范围通过以下方式定义: let sheetx = SpreadsheetApp.getActiveSheet() 和 var range_input = sheetx.getRange(1, 1, sheetx.getLastRow(), sheetx.getLastColumn());尝试使用单引号、双引号、let、vars 的所有组合调用 functin 不起作用。我正在尝试获取一个可以提供给更多代码的数组。
  • @user363 如果第一张工作表是Sheet1 并且范围是A1:F50,请尝试const test1 = () =&gt; console.info(getVisibleValues_('Sheet1', 'A1:F50'));。运行test1 后,您将在日志中获取数据。
  • @user 修改了脚本以接受工作表/范围对象。 const sheetx = SpreadsheetApp.getActiveSheet();const range_input = sheetx.getRange(1, 1, sheetx.getLastRow(), sheetx.getLastColumn()); const test2 = () =&gt; console.info(getVisibleValues_(null, null, sheetx, range_input));
猜你喜欢
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多