Как получить позицию в ячейке кнопки или, вернее, как получить переменную для выполнения кнопки? - PullRequest
1 голос
/ 30 сентября 2019

С помощью этой функции я хотел бы сделать следующее:

Поток

1.) Получить текущий идентификатор пользователя

2.)Поиск строк пользователя с состояниями на значке предупреждения

3.) Измените дату в столбце K на текущую дату в формате «dd.MM.yyyy»

4.)Сгенерируйте метку времени в столбце L в формате «ЧЧ: мм: сс»

5.) Сгенерируйте метку времени в столбце P с использованием формата «дд.ММ.гггг» «ЧЧ: мм»

enter image description here

Поэтому я использовал приведенный ниже код.

К сожалению, код не работает. Я не получил никакой ошибки.

Что я делаю не так?

    function CheckAll(){


  var userID=getUserId();
    if(userID) {    
      var timezone = "GMT+2";
      var TimestampFormat1 = "dd.MM.yyyy' 'HH:mm";
      var TimestampFormat2 = "HH:mm:ss";
      var ss=SpreadsheetApp.getActiveSpreadsheet();
      var tickerCheck=ss.getSheetByName('WATCHLIST-Pflege');
      var State=tickerCheck.getRange("O1:O2").getCell(2,1).getValues();
      var startRow=16;
      var lastRow=tickerCheck.getLastRow()-startRow+1;
      var rngStateCheck=tickerCheck.getRange(startRow,15,lastRow,1);
      var StateCheck=rngStateCheck.getValues();
      var userIds=tickerCheck.getRange(startRow,1,lastRow,1).getValues();
      var rngLastCheck=tickerCheck.getRange(startRow,11,lastRow,1);
      var rngTimeStamp1=tickerCheck.getRange(startRow,12,lastRow,1);
      var rngTimeStamp2=tickerCheck.getRange(startRow,16,lastRow,1);
      var date=new Date();


      for(var i=0;i<StateCheck.length;i++){

         if(StateCheck[i][14]==State && userIds[i][0]==userID){
             rngLastCheck.getCell(i+1, 1).setValue(date);
             rngTimeStamp1.getCell(i+1, 1).setValue(Utilities.formatDate(date, timezone, TimestampFormat2));
             rngTimeStamp2.getCell(i+1, 1).setValue(Utilities.formatDate(date, timezone, TimestampFormat1));
          }

      } 
}else{
    SpreadsheetApp.getUi().alert('Falsche User ID');
  }
}

function getUserId() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Startseite');
  var rg=sh.getRange(35,3,sh.getLastRow()-3,3);
  var vA=rg.getValues();
  var userEmail=Session.getEffectiveUser().getEmail();  
  for(var i=0;i<vA.length;i++) {
    if(vA[i][0]==userEmail) {
      return vA[i][1];
      break;
    }
  }
  return null;
}

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Я решил проблему, добавив переменную var StateToCheck=StateCheck[i][0] в цикл for.

Теперь код выглядит так:

function CheckAll(){


  var userID=getUserId();
    if(userID) {    
      var timezone = "GMT+2";
      var TimestampFormat1 = "dd.MM.yyyy' 'HH:mm";
      var TimestampFormat2 = "HH:mm:ss";
      var ss=SpreadsheetApp.getActiveSpreadsheet();
      var tickerCheck=ss.getSheetByName('WATCHLIST-Pflege');
      var State=tickerCheck.getRange("O1:O2").getCell(2,1).getValues();
      var startRow=16;
      var lastRow=tickerCheck.getLastRow()-startRow+1;
      var rngStateCheck=tickerCheck.getRange(startRow,15,lastRow,1);
      var StateCheck=rngStateCheck.getValues();
      var userIds=tickerCheck.getRange(startRow,1,lastRow,1).getValues();
      var rngLastCheck=tickerCheck.getRange(startRow,11,lastRow,1);
      var rngTimeStamp1=tickerCheck.getRange(startRow,12,lastRow,1);
      var rngTimeStamp2=tickerCheck.getRange(startRow,16,lastRow,1);
      var date=new Date();


      for(var i=0;i<StateCheck.length;i++){
         var StateToCheck=StateCheck[i][0]
         if((StateToCheck==State)&&(userIds[i][0]==userID)){

             rngLastCheck.getCell(i+1, 1).setValue(date);
             rngTimeStamp1.getCell(i+1, 1).setValue(Utilities.formatDate(date, timezone, TimestampFormat2));
             rngTimeStamp2.getCell(i+1, 1).setValue(Utilities.formatDate(date, timezone, TimestampFormat1));
          }

      } 
}else{
    SpreadsheetApp.getUi().alert('Falsche User ID');
  }
}

function getUserId() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Startseite');
  var rg=sh.getRange(35,3,sh.getLastRow()-3,3);
  var vA=rg.getValues();
  var userEmail=Session.getEffectiveUser().getEmail();  
  for(var i=0;i<vA.length;i++) {
    if(vA[i][0]==userEmail) {
      return vA[i][1];
      break;
    }
  }
  return null;
}
0 голосов
/ 30 сентября 2019

Вы можете использовать этот подход:

function CheckAll1(){
  var userID=getUserId();
  if(userID) {        
    var ss=SpreadsheetApp.getActive();
    var tsh=ss.getSheetByName('Tickerprüfung');
    var startRow=12;
    var lastRow=tsh.getLastRow()-startRow+1;
    var range=tsh.getRange(startRow,12,tsh.getLastRow()-startRow+1,1);
    var tvA=range.getValues();
    var userIds=tsh.getRange(startRow,1,tsh.getLastRow()-startRow+1,1).getValues();
    var lcrg=tsh.getRange(startRow,9,tsh.getLastRow()-startRow+1,1);
    var tsrg=tsh.getRange(startRow,10,tsh.getLastRow()-startRow+1,1);
    var today=new Date();
    var dateInMs=new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime();
    for(var i=0;i<tvA.length;i++){
      var nextDate=new Date(tvA[i][0]);
      if(Object.prototype.toString.call(nextDate) === '[object Date]' && userIds[i][0]==userID) {
        if(dateInMs>=nextDate.getTime()){
          lcrg.getCell(i+startRow, 1).setValue(today);
          tsrg.getCell(i+startRow, 1).setValue(new Date().toLocaleTimeString());
        }
      }
    } 
  }else{
    SpreadsheetApp.getUi().alert('Invalid UserId');
  }
}

function getUserId() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Startseite');
  var rg=sh.getRange(20,2,sh.getLastRow()-19,2);
  var vA=rg.getValues();
  var userEmail=Session.getEffectiveUser().getEmail();  
  for(var i=0;i<vA.length;i++) {
    if(vA[i][0]==userEmail) {
      return vA[i][1];
      break;
    }
  }
  return null;
}

И затем в листе Startseite вы можете связать электронные письма пользователей с UserId таким образом.

enter image description here

Посмотрите внимательно на код, поскольку я исправил некоторые ошибки, относящиеся к вычислению строк, которые не учитывали startRow=12. Третий параметр в диапазоне - это число строк, а не последняя строка. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...