Как пересчитать значения между столбцами в соответствии с соотношением по сценарию? - PullRequest
0 голосов
/ 29 февраля 2020

Я написал этот скрипт. Это работает для значений, но получаю ошибку #NUMBER! (# ЧИСЛО!) В строке заголовка (строка 1) введите описание изображения здесь . Где я не прав? Я думаю, что это проблема получения диапазона onEdit (), но я не уверен в этом. Я пытался изменить typeof как typeof e.value === 'number' ? 'string' : e.value или typeof e.value !== 'number' ? "": e.value и typeof e.value !== 'number' ? e.value : "", но это не работает так, как я хочу.

function onEdit(e) {
  const value = (typeof e.value === 'number' ? "" : e.value);
  Logger.log(value);
  const sheet = e.range.getSheet();
  

  // Get the "Coordinates" of the edit
  let startColumn = e.range.getColumn();
  Logger.log(startColumn);
  let startRow = e.range.getRow();

  // Get the ratios at the edited row
  let hRatio = sheet.getRange(startRow, 8).getValue();
  let iRatio = sheet.getRange(startRow, 9).getValue();
  
  // Get array limit
  let finalval = sheet.getRange("C1:C").getValues();
  let final = finalval.filter(String).length;
  let valueAlt = sheet.getRange(startRow, 6).getValue();
  switch(startRow > 1 && startRow < (final + 1)) {
    case startColumn == 5: // Edit on E column
        sheet.getRange(startRow, 6).setValue(value * (1 - hRatio)); //Update F Cell 
        sheet.getRange(startRow, 7).setValue(value * (1 - hRatio) * (1 - iRatio)); // Update G Cell
        break;
    case startColumn == 6:     
        sheet.getRange(startRow, 5).setValue(value / (1 - hRatio)); 
        sheet.getRange(startRow, 7).setValue(value * (1 - iRatio)); 
        break;
    case startColumn == 7: // Edit on G column
        sheet.getRange(startRow, 5).setValue(value / (1 - hRatio) / (1 - iRatio));
        sheet.getRange(startRow, 6).setValue(value / (1 - iRatio));
        break;
    case startColumn == 3: // Edit on C column
        sheet.getRange(startRow, 5).setValue(valueAlt / (1 - hRatio)); // Update on E cell
        sheet.getRange(startRow, 7).setValue(valueAlt * (1 - iRatio));
        break;  
    case startColumn == 4: // Edit on D column
        sheet.getRange(startRow, 5).setValue(valueAlt / (1 - hRatio)); // Update on E cell
        sheet.getRange(startRow, 7).setValue(valueAlt * (1 - iRatio)); 
        break; 
    default: break;

  }


}

Я думаю, что это проблема диапазона onEdit (), но я не понимаю, где.

1 Ответ

4 голосов
/ 29 февраля 2020

Лучший способ для вас - использовать ранний выход из функции.

Просто проверьте startRow === 1, прежде чем что-то делать.

/**
 *
 * @param {GoogleAppsScript.Events.SheetsOnEdit} e
 */
function onEdit(e) {
  const startRow = e.range.getRow();
  if (startRow === 1) return;
  const value = e.value;
  const sheet = e.range.getSheet();

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