Javascript 如何在Google Sheets中仅对筛选行的范围使用setValue(getRange用于非隐藏单元格)?
我想知道,如果有经过筛选的行,如何使用setValue,这样只有显示的行(C1+C的最后一行)才能得到一个值Javascript 如何在Google Sheets中仅对筛选行的范围使用setValue(getRange用于非隐藏单元格)?,javascript,google-apps-script,google-sheets,filter,range,Javascript,Google Apps Script,Google Sheets,Filter,Range,我想知道,如果有经过筛选的行,如何使用setValue,这样只有显示的行(C1+C的最后一行)才能得到一个值 x(){ var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); sheet.getRange(C2, lastRow).setValue('x'); } 更新 它起作用了,但速度很慢。我已经测试了下面的代码,它运行得很快。它必须从显示的第二行开始。下面的解决方案可以使用过
x(){
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
sheet.getRange(C2, lastRow).setValue('x');
}
更新
它起作用了,但速度很慢。我已经测试了下面的代码,它运行得很快。它必须从显示的第二行开始。下面的解决方案可以使用过滤器,也可以不使用过滤器。尚未运行的是第二行(C2)。复制的值始终插入其中。此外,如果可能的话,我想不使用辅助单元格进行复制。是否可以复制copypaste函数(getValue)的setValue
目标是在C列的当前可见(而不是隐藏或不可见的过滤)单元格中放置一个x。为此,我只需要知道如何将第二个可见单元格指定为getRange值(例如使用偏移量),因为其余单元格(结束单元格:lastRow)正在工作(正确的选择和输入,只有C2,每次,如果我使用此脚本,C2中有一个x):
第一行是固定的。如何为getRange使用第一个visibile not fixed行(第二行)?如果最后一行是隐藏的,并且使用了脚本,则不会在那里设置x,可能是因为“C”+lastRow。这起作用。只有C2受影响
这是解决办法
- 您希望使用
将值放入筛选列(列“C”)的显示行中setValue
- 过滤器是基本过滤器
- 在这种情况下,您可以使用
通过过滤器检索显示行和隐藏行的行号。isRowHiddenByFilter
- 当
为isRowHiddenByFilter
时,该行处于隐藏状态true
- 当
为isRowHiddenByFilter
时,将显示该行false
- 当
- 范围列表是根据检索到的行号创建的,用于
setValue
var sheet=SpreadsheetApp.getActiveSheet();
var lastRow=sheet.getLastRow();
var范围=[];
对于(变量i=0;i
- 运行脚本时,
的值被放入列“C”的显示行中x
- 如果
修改为If(!sheet.isrowhidenbyfilter(i+1)){
,则If(sheet.isrowhidenbyfilter(i+1)){
的值放入隐藏行x
如果我误解了您的问题,并且这不是您想要的方向,我很抱歉。我发现getDataRange比getRange快。如何将其集成到函数中?可能与手动插入一样快。@user8652270感谢您的回答。我不得不为我的英语技能差道歉。不幸的是,我无法理解d关于您的回答。我理解您的问题,因为
您想使用setValue将值放入筛选列(列“C”)的显示行中.
。我的理解不正确吗?如果我的理解不正确,我可以向您询问您的问题吗?我希望通过正确理解您的问题来思考您的问题。因此,如果您能够合作解决您的问题,我很高兴。以上我已发送了一些更新、更快解决方案的信息(请查找更新)@user8652270谢谢你的回答。首先,我能问你我对你的问题的理解是否正确吗?我必须为我的英语水平低下道歉。我看到了你更新的问题。但很遗憾,我无法理解你想做什么。我能问你你的目标吗?@user8652270如果你想设置x从第2行开始,请在我的答案脚本中将(VARI=0;i
修改为(VARI=1;ifunction 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);
};
spreadsheet.getRange('C2:'+'C'+lastRow).activate();
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);
}
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');