从同一工作表的不同选项卡上的单元格复制背景颜色

Tho*_*ner 5 google-sheets google-apps-script

在 Google 表格中,我有两个包含不同信息的选项卡。选项卡 A 有一个表格,我将其用作每个人的变量摘要。选项卡 B 以随机顺序对每个变量进行颜色编码。我想要实现的目标是将选项卡 A 上的汇总表链接到选项卡 B 上的颜色编码。因此,每当选项卡 B 上每个变量的颜色发生变化时,选项卡 A 上的颜色也会发生变化。

例子

是否可以将键入的值保留在选项卡 A 的单元格内,但复制选项卡 B 中的颜色编码(背景颜色)?

我认为唯一的方法是使用自定义函数或脚本。

我尝试使用条件格式,但问题是,只有所有数据都在同一选项卡上时,我才能使其正常工作。

Ed *_*son 3

这应该做你想做的。它还将处理添加人员和车辆。我还分享了我测试过的电子表格。

function colorCode() {
  var ss=SpreadsheetApp.getActiveSpreadsheet()
  var lr=ss.getSheets()[0].getLastRow() // get last row of sheet1
  var lc=ss.getSheets()[0].getLastColumn() //get last column of sheet1
  var lr1=ss.getSheets()[1].getLastRow() // get last row of sheet2
  var lc1=ss.getSheets()[1].getLastColumn() ////get last column of sheet2
  var sv=ss.getSheets()[0].getRange(1,2,1,lc-1).getValues() // get vehicles
  var sn=ss.getSheets()[0].getRange(2,1,lr-1,1).getValues() // get names
  var s1=ss.getSheets()[1].getRange(2,1,lr,lc-1)//exclude lehend
  var rng1=s1.getValues() // get sheet2 data
  var rng2=s1.getBackgrounds() // get background colors of dheet2 data

  var col=1 //column for vehicles om sheet1
   for(var m=0;m<sv[0].length;m++){ //for each vehicle
      col=col+1 //add one to vehicle column
  for(var n=0;n<sn.length;n++){ //for each name
  for(var i=0;i<sn.length;i++){ //loop sheet2 data
  for(var j=0;j<rng1[0].length;j++){
    if(rng1[i][j].indexOf(sv[0][m])>-1 && rng1[i][j].indexOf(sn[n][0])>-1){ //if sheet2 data cell contains vehicle and name
       var c=ss.getSheets()[0].getRange(n+2, col).setBackground(rng2[i][j]) //set color of vehicle and name on sheet1
  }}}}}
}
Run Code Online (Sandbox Code Playgroud)

测试电子表格:

https://docs.google.com/spreadsheets/d/13zudMf86oOXHMSYg6rJGPguNfRxCr0aUHAktr0RqWzY/edit?usp=sharing
Run Code Online (Sandbox Code Playgroud)

要将 Sheet1 上的表格向下移动 4 行,请使用此命令。这些更改已在代码中注明。

function colorCode() {
  var ss=SpreadsheetApp.getActiveSpreadsheet()
  var lr=ss.getSheets()[0].getLastRow() // get last row of sheet1
  var lc=ss.getSheets()[0].getLastColumn() //get last column of sheet1
  var lr1=ss.getSheets()[1].getLastRow() // get last row of sheet2
  var lc1=ss.getSheets()[1].getLastColumn() ////get last column of sheet2
  var sv=ss.getSheets()[0].getRange(5,2,1,lc-1).getValues() // get vehicles//CHANGED 1 tp 5
  var sn=ss.getSheets()[0].getRange(6,1,lr-5,1).getValues() // get names//CHANGED 2 to 6 and -1 to -5
  var s1=ss.getSheets()[1].getRange(2,1,lr,lc-1)//exclude legend
  var rng1=s1.getValues() // get sheet2 data
  var rng2=s1.getBackgrounds() // get background colors of sheet2 data

 var col=1 //column for vehicles on sheet1
   for(var m=0;m<sv[0].length;m++){ //for each vehicle
      col=col+1 //add one to vehicle column
  for(var n=0;n<sn.length;n++){ //for each name
  for(var i=0;i<sn.length;i++){ //loop sheet2 data
  for(var j=0;j<rng1[0].length;j++){
    if(rng1[i][j].indexOf(sv[0][m])>-1 && rng1[i][j].indexOf(sn[n][0])>-1){   //if sheet2 data cell contains vehicle and name
       var c=ss.getSheets()[0].getRange(n+6, col).setBackground(rng2[i][j]) //set color of vehicle and name on sheet1//CHANGED +2 to +6
  }}}}}
}
Run Code Online (Sandbox Code Playgroud)