繁体   English   中英

如何在 Google Sheets 中仅将 setValue 用于过滤行的范围(getRange 用于非隐藏单元格)?

[英]How to use in Google Sheets setValue only for range of filtered rows (getRange for not hidden cells)?

我想知道,如果有过滤的行,如何使用 setValue,以便只有显示的行(C1 + 一行向下到 C 的最后一行)获得一个值。

x(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  sheet.getRange(C2, lastRow).setValue('x');
}

更新

它有效,但非常缓慢。 我已经测试了以下代码,它运行得很快。 它必须从显示的第二行开始。 以下解决方案适用于和不使用过滤器。 尚未运行的是第二行 (C2)。 复制的值总是插入那里。 此外,如果可能的话,我希望没有用于复制的辅助单元。 是否可以为复制粘贴功能 (getValue) 复制 setValue?

function x() {
  var spreadsheet = SpreadsheetApp.getActive();
  var lastRow = spreadsheet.getLastRow();
  spreadsheet.getRange('C2:'+'C'+lastRow).activate();
  spreadsheet.getRange('C1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};

目标是在 C 列的当前可见(不是隐藏或不可见过滤)单元格中放置一个 x。为此,我只需要知道如何将第二个可见单元格指定为 getRange 值(例如,带有偏移量),因为其余的(结束单元格:lastRow)正在工作(正确的选择和输入,只有 C2,每次,如果我使用这个脚本,C2 ax 中有):

spreadsheet.getRange('C2:'+'C'+lastRow).activate();

第一行是固定的。 如何将第一个可见的非固定行(第二行)用于 getRange? 如果最后一行被隐藏并且使用了脚本,则那里没有设置 x,可能是因为 'C'+lastRow。 这有效。 只有 C2 受到影响。

这是解决方案

var s = SpreadsheetApp.getActive().getActiveSheet();

function x() {
  var lastRow = s.getLastRow();
  for(var row = 2; s.isRowHiddenByFilter(row); ++row);
  var range = s.getRange('C'+row+':C'+lastRow);
  s.getRange('F1').copyTo(range, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}
  • 您想使用setValue将值放入过滤列(列“C”)的显示行中。
  • 过滤器是基本过滤器。

如果我的理解是正确的,这个答案怎么样? 请将此视为几种可能的答案之一。

改装要点:

  • 在这种情况下,您可以使用isRowHiddenByFilter通过过滤器检索显示和隐藏行的行号。
    • isRowHiddenByFiltertrue ,该行正在隐藏。
    • isRowHiddenByFilterfalse ,将显示该行。
  • 范围列表是根据检索到的行号创建的,用于setValue

修改后的脚本:

var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var ranges = [];
for (var i = 0; i < lastRow; i++) {
  if (!sheet.isRowHiddenByFilter(i + 1)) {
    ranges.push("C" + (i + 1));
  }
}
sheet.getRangeList(ranges).setValue('x');
  • 当您运行脚本时, x的值被放入“C”列的显示行中。
  • 如果if (!sheet.isRowHiddenByFilter(i + 1)) {修改为if (sheet.isRowHiddenByFilter(i + 1)) { ,则x的值被放入隐藏行。

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM