首页 > 解决方案 > 将单元格复制到另一个工作表的脚本,例如,基于单元格的背景颜色

问题描述

首先,我对 Google 表格和脚本完全陌生,所以我正在努力自学,如果我问的是“愚蠢”的问题,我很抱歉

所以我的问题是:我创建了一个脚本,基本上根据特定条件向单元格添加背景颜色。我现在想做的是识别所有添加了背景颜色的单元格,选择包含它们的整行并将所有信息复制到另一张表。

我试图用 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

标签: google-apps-scriptgoogle-sheets

解决方案


解释:

您的目标是仅过滤F 列中背景颜色所在的行,'#b7e1cd'并将这些值复制到不同的工作表中。

  • 您不需要循环来实现此目标,您可以直接过滤 F 中背景颜色为 的行'#b7e1cd'

    const new_values = values.filter((_,i)=>colors[i]=='#b7e1cd');
    

    其中values定义为 的完整数据范围Sheet1

    const values = sh.getDataRange().getValues();
    

copyTo如果您想在同一个电子表格文件中移动数据,您可以使用它。这就是为什么我更喜欢getRange/setValues它,因为它没有这个限制。

解决方案:

以下脚本将从 的单元格开始粘贴A1Sheet2。如果您想要不同的起始单元格,请修改1,1target_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);
}

推荐阅读