我有一张Google Drive
有两张纸的电子表格。
Sheet 1
有三列:name
, date
,type
Sheet 2
也有三列:name
, date
,proposed
我想编写一个脚本,该脚本将在我编辑任一工作表并突出显示proposed
(Sheet 2
如果满足条件)时运行。
该脚本应取名称Sheet 2
并在Sheet 1
. 然后从这些记录中,找到具有特定type
(在本例中为“Last Date”)的记录,并从这些行中返回MAX()
日期。如果该日期与 中的proposed
列匹配Sheet 2
,则突出显示proposed
。
proposed
如果匹配,我已经能够着色,但我需要帮助根据上述标准date
输入正确的日期。date
Sheet 2 date
编写公式以从中获取所需数据是否更好/可能Sheet 1
?或者,我是否需要proposed
在更改为 后编写脚本来填充列Sheet 1
?
对于任何一种/两种情况,我该怎么做?我的搜索都没有帮助我到达那里。
我曾尝试编写这样的单元格公式:=arrayformula(IF('Sheet 1'!C2:C500="Last Date",min(ROW('Sheet 1'!C2:C500)),""))
以及许多变体,但都没有产生我需要的结果。
我可以很容易地把它写在 中Excel
,但无法找出Google Drive
等价物。这是一种方法Excel
:
=MAX(IF(2name=1nameRage, IF(1typeRange = "Last Date",1dateRange)))
这是我检查名称并调用相关函数的函数。
function onEdit(e){
var sheet = SpreadsheetApp.getActiveSheet().getSheetName();
if(sheet.toString()=="Sheet 2"){
dataCheck(e);
}else if(sheet.toString()=="Sheet 1"){
colorItems("Sheet 2","dataRange");
}
}
function dataCheck(e){
var col = e.range.getColumn();
if(col==2){
var row = e.range.getRow();
var cell = SpreadsheetApp.getActiveSheet().getRange(row,col);
var bgc = cell.getBackground();
var cProp = cell.getValue();
var cLast = SpreadsheetApp.getActiveSheet().getRange(row,col+1).getValue();
if(cLast.toString()==cProp.toString() && cProp.toString()!=""){
cell.setBackgroundRGB(190, 190, 190);
}else if (bgc=="#bebebe"){
cell.setBackgroundRGB(255, 255, 255);
}
}
}
function colorItems(sheetName,nameRange){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
var data = sheet.getDataRange();
var numRows = data.getNumRows();
var pDates = ss.getRangeByName(nameRange);
var pDateObject = getRowsData(sheet, pDates);
for (var i = 0; i <= numRows; i++) {
var cell = sheet.getRange(i+2, 2, 1, 1);
var cLast = pDateObject[i].last;
var cProp = pDateObject[i].proposed;
if(!isCellEmpty(cProp)){
if(cLast.toString() ==cProp.toString()){
cell.setBackgroundRGB(190, 190, 190);
}
}else{
cell.setBackgroundRGB(255, 255, 255);
}
}
}