Javascript 谷歌在单元格';由公式生成的值

Javascript 谷歌在单元格';由公式生成的值,javascript,google-apps-script,google-sheets,conditional-statements,Javascript,Google Apps Script,Google Sheets,Conditional Statements,是否可以根据公式生成的单元格变量值创建自动注释 例如,A1=stxt(B1;1;4)用B1=sometext(变量值)给出“some”,因此A1的注释应该是“some” 还有第二个问题:如何为异常处理添加至少第三个条件 mySelection.getValues().flat().map(v=>[v=="/" || ""?null:v]); // or #N/A or #VALUE! 我也没有成功地在一个代码行中包含多个OR条件,因此我必须放置许多

是否可以根据公式生成的单元格变量值创建自动注释

例如,A1=stxt(B1;1;4)用B1=sometext(变量值)给出“some”,因此A1的注释应该是“some” 还有第二个问题:如何为异常处理添加至少第三个条件

mySelection.getValues().flat().map(v=>[v=="/" || ""?null:v]); // or #N/A or #VALUE!
我也没有成功地在一个代码行中包含多个OR条件,因此我必须放置许多if语句,如下所示:

     var excludedCols = [2, 4, 6, 8, 10, 12, 14];
     // because if(cellule.substring(0,1) = "C"||"E"||"G"||"I"||"K"||"M"){ is not working
     if (col > 2 && col < 23){
       if (e.range.getRow() > 1){
         if (excludedCols.indexOf(col) == -1){ }
       }
     }
var excludedCols=[2,4,6,8,10,12,14];
//因为如果(单元子串(0,1)=“C”| |“E”| |“G”|“I”| |“K”|“M”){不起作用
如果(列>2和列<23){
如果(e.range.getRow()>1){
if(excludedCols.indexOf(col)=-1){
}
}
PS:这些问题来自我在这里回答的前一个问题:

这是一张插图:

onEdit()函数,仅当单元格值为 手动编辑,但不通过函数更改的相对值进行编辑 在该单元格内

  • 您试图通过公式触发
    onEdit
    函数,但触发器不是这样工作的。状态如下:
onEdit(e)
触发器在用户更改 电子表格中任何单元格的值

即,
onEdit
触发器仅通过用户操作激活,而不是通过公式或脚本激活

解决方法是稍微修改当前的
onEdit
代码,并包含一个代码,该代码允许您在更改公式所依赖的单元格的值时编辑公式部分。例如,当您在标题3的
列A
中的ame行:

else if(NomFeuilleActive=="Header 3"){
   if(col==1 && row>1){
   e.source.getSheetByName("Feuille1").getRange(row,3).setNote(e.range.getValue());
   }
  }
解决方案:
函数onEdit(e){
var classeur=SpreadsheetApp.getActiveSheet();
var nomfueilleactive=classeur.getName();
var mySelection=SpreadsheetApp.getActiveRange();
var excludedCols=[2,4,6,8,10];
var cellle=mySelection.getA1Notation();
var col=e.range.getColumn();
var row=e.range.getRow();//新代码
如果(nomfueilleactive==“Feuille1”){//新代码
如果(列>2和列<11){
if(e.range.getRow()>1){//if不是第一行标题(为什么它不能与substring()一起工作?=“1”?!
if(不包括col.indexOf(col)=-1){
var note=mySelection.getDisplayValue();
mySelection.setNote(note);//SpreadsheetApp.getUi().alert(e.oldValue);
} 
}
}
}
//新代码
否则如果(nomfueilleactive==“标题3”){
如果(列==1&&row>1){
e、 source.getSheetByName(“Feuille1”).getRange(第3行).setNote(e.range.getValue());
}
}
//
var Plage=SpreadsheetApp.getActiveSheet().getRange(“C2:I”);
var valeurs=Plage.getValues().flat().map(v=>[v==“#VALUE!”| VALUE!”| null:v])//不使用“#VALUE!”或“#VALEUR!”
var notes=Plage.getNotes();
var Tab=[]、[]、[];
var-ToCorrect=[];
对于(i=0;i[[“/”,“,”,“#N/A!”,“#VALUE!”,“#VALEUR!”)。包括(v)?null:v]);


您可以在内部数组中列出要从设置注释中排除的所有值。

我通过在onEdit()中调用insertNotes()函数找到了它


注:我使用带有法语参数的表格。B 2:案例研究在onEdit()中函数,该函数仅在手动编辑单元格值时有效,但不受该单元格内函数更改的相对值的影响谢谢Marios。好的,再次说明,对不起。是的,当我手动启动脚本时,您的函数是完美的,但在onEdit()中不再起作用如您所见,工作表示例中C2:C5中没有注释。@谢谢您的反馈。请查看我的更新答案。问题与以下事实有关:
onEdit
触发器不是由公式触发的,而是由用户修改触发的。我在回答中描述的解决方法是将注释设置为公式单元格当你编辑改变公式的单元格时。更多细节请参见我的答案谢谢你Marios,你帮了我这么多!生命保佑你我会仔细查看你所有(编辑的)解决方案,让我的更好。我的大脑着火了lol@Nad我也在从回答中学习。也谢谢你,快乐地编码:)
function onEdit(e){
   var classeur = SpreadsheetApp.getActiveSheet();
   var NomFeuilleActive = classeur.getName();
   var mySelection = SpreadsheetApp.getActiveRange();
   var excludedCols = [2, 4, 6, 8, 10];
   var cellule = mySelection.getA1Notation();
   var col = e.range.getColumn();
   var row = e.range.getRow(); //new code
  
   if (NomFeuilleActive == "Feuille1"){ // new code
    if (col > 2 && col < 11){
     if (e.range.getRow() > 1){ // if is not 1st line headers (why doesn't it work with substring() == "1" ?!
       if (excludedCols.indexOf(col) == -1){
          var note = mySelection.getDisplayValue();
          mySelection.setNote(note);  //SpreadsheetApp.getUi().alert(e.oldValue);
       } 
     }
   }
  }
  //new code
  else if(NomFeuilleActive=="Header 3"){
   if(col==1 && row>1){
   e.source.getSheetByName("Feuille1").getRange(row,3).setNote(e.range.getValue());
   }
  }
  //
  
  var Plage = SpreadsheetApp.getActiveSheet().getRange("C2:I");
  var valeurs = Plage.getValues().flat().map(v=>[v=="#VALUE!" || ""?null:v]); // not working with "#VALUE!" or "#VALEUR!"
  var notes = Plage.getNotes().map(v=>[v=="* %" || ""?null:v]);
  var Tab = [[],[],[]];
  var ToCorrect = [];

  for (i=0; i<notes.length; i++){
   // Tab[1].push([valeurs[i]]);
   // Tab[2].push([notes[i]]);
  
    if (e.range.getNumberFormat() != "0.###############"){
    if (valeurs[i] != notes[i]){ 
        ToCorrect.push(valeurs[i]); // SpreadsheetApp.getUi().alert(valeurs[i]);
         // SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange("A1")        }  SpreadsheetApp.getRange( 
    }
    }
  }
}
function onEdit(e){
  var Header3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Header3");
  var Feuille1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Feuille1");
  var valTemp = Feuille1.getRange("N4").getValue();
  Header3.getRange("A2").setValue(valTemp);
 insertnotes(e);
}


 
function insertnotes(e){
   var mySelection = e.range; 
   var excludedCols = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22];
   
   var col = e.range.getColumn(); //SpreadsheetApp.getUi().alert(col);
  
  var DestRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Feuille1").getRange("C2:C5");
                                                       
   var notes = DestRange.getValues();
   DestRange.setNotes(notes); 
}