首先,我对 Google Sheets 和 Scripts 完全陌生,所以我正在尝试自己学习,如果我问了一些“愚蠢”的问题,很抱歉
所以我的问题是:我创建了一个脚本,根据特定条件为单元格添加背景颜色。我现在想要做的是用添加的背景颜色识别所有单元格,选择包含它们的整行并将所有信息复制到另一个工作表。
我试图用 if 条件来做,但我不知道如何选择整行,或者我用来获取背景颜色的条件是否正确。有谁能够帮我?非常感谢!
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Sheet1');
var r = s.getRange('F:F');
var v = r.getBackgrounds();
for(var i=v.length-1;i>=0;i--)
if(v =='B7E1CD')
s.getCurrentCell.copyTo(spreadsheet.getRange(20,1)); //don't mind this instruction, I know it isn't right
答案 0 :(得分:1)
您的目标是仅filter 列 F 中背景颜色为 '#b7e1cd'
的行,并将这些值复制到不同的工作表中。
您不需要循环来实现此目标,您可以直接过滤 F 中背景颜色为 '#b7e1cd'
的行。
const new_values = values.filter((_,i)=>colors[i]=='#b7e1cd');
其中 values
定义为 Sheet1
的完整 datarange:
const values = sh.getDataRange().getValues();
如果您想在同一个电子表格文件中移动数据,您可以使用 copyTo
。这就是我更喜欢 getRange/setValues
的原因,因为它没有这个限制。
以下脚本将从 A1
的单元格 Sheet2
开始粘贴值。如果您想要不同的起始单元格,请将 1,1
中的 target_sh.getRange(1,1,..)
修改为不同的单元格引用。
function myFunction() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1'); // put the name of the source sheet
const target_sh = ss.getSheetByName('Sheet2'); // put the name of the target sheet
const colors = sh.getRange('F1:F').getBackgrounds().flat();
const values = sh.getDataRange().getValues();
const new_values = values.filter((_,i)=>colors[i]=='#b7e1cd');
target_sh.getRange(1,1,new_values.length,new_values[0].length).setValues(new_values);
}
根据您的工作表更新了代码:
function iftest() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('HH 2 - Main Database'); // put the name of the source sheet
const target_sh = ss.getSheetByName('HH 1 - New Database'); // put the name of the target sheet
const colors = sh.getRange('F1:F').getBackgrounds().flat();
console.log(colors);
const values = sh.getDataRange().getValues();
let LastRow = target_sh.getLastRow();
const new_values = values.filter((_, i) => colors[i]=='#ff6d01');
target_sh.getRange(LastRow+1,1,new_values.length,new_values[0].length).setValues(new_values);
}