我有一张Google Drive
电子表格,上面有两张。
Sheet 1
有三列:name
,date
,type
Sheet 2
还有三列:name
,date
,proposed
我想编写一个脚本,该脚本将在我编辑任何工作表时运行,并在proposed
上突出显示Sheet 2
(如果符合条件)。
脚本应采用Sheet 2
中的名称,并在Sheet 1
上查找所有相关记录。然后从这些记录中找到具有特定type
(在这种情况下为“上次日期”)的那些记录,并从这些行返回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);
}
}
}
答案 0 :(得分:1)
具有讽刺意味的是,我通过复制我的Excel公式找到了它:
=arrayformula(MAX(IF('Sheet 1'!C2:C500="Last Date",IF(D2='Sheet 1'!A2:A500,'Sheet 1'!B2:B500))))