我有一个包含两个工作表的Google Drive电子表格。
Sheet 1有三列:name、date、type
Sheet 2还有三列:name、date、proposed
我想编写一个脚本,当我编辑任一工作表并突出显示Sheet 2上的proposed时(如果满足条件),该脚本将运行。
该脚本应采用Sheet 2中的名称,并在Sheet 1上查找所有相关记录。然后从这些记录中,找到具有特定日期的记录(在本例中为"Last type“),并从这些行中返回MAX()日期。如果该日期与Sheet 2中的proposed列匹配,则突出显示proposed。
我已经能够颜色proposed如果date匹配,但我需要帮助获得正确的日期到date的基础上提到的标准。
用Sheet 2 date编写一个公式来从Sheet 1获取所需数据是否更好/更可能?或者,在更改为Sheet 1之后,我是否需要编写一个脚本来填充proposed列?
使用其中一种/两种情况时,我该如何操作?我的搜索都没有帮助我做到这一点。
我试过写这样的单元格公式:=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);
}
}
}发布于 2013-07-20 10:01:23
具有讽刺意味的是,我通过复制我的Excel公式找到了它:
=arrayformula(MAX(IF('Sheet 1'!C2:C500="Last Date",IF(D2='Sheet 1'!A2:A500,'Sheet 1'!B2:B500))))https://stackoverflow.com/questions/17757589
复制相似问题