[英]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
通过过滤器检索显示和隐藏行的行号。
isRowHiddenByFilter
为true
,该行正在隐藏。isRowHiddenByFilter
为false
,将显示该行。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.