Искать и заменять на новом листе в определенном столбце с помощью скрипта

Прошу вашей помощи в решении следующего вопроса.
В электронной таблице Google у меня есть лист под названием «База данных», содержащий следующие данные:

 Item    Department Budget  Prev.Year   Forecast
A3929232    Germany  1000    5.504      5050
B3232323    Germany  2000    4.500      5050
C6506506    Spain    3000    6.080      5080
D5046506    Spain    4000    9.090      7700
E5650600    Spain    5000    6.050      9900

У меня есть еще один лист под названием «План», в котором есть следующее:

Item      Department  New Amount
B3232323    Germany     5000
D5046506    Spain       2000

В листе «План» я бы ввел сумму в C2 (Новая сумма), например 5000, и мне нужен сценарий, который ищет в той же строке (A2) элемент B3232323 на листе «База данных» и заменяет его в «База данных». столбец C с новой суммой (заменить старый 2000 на новый 5000).

Я бы хотел, чтобы этот сценарий работал со всеми строками листа «План», которые имеют значения, и если сценарий не может найти в «Базе данных», элемент и значение всегда следует вводить в последней строке в конце «База данных». ".

Ссылка на файл следующая: .google.com / spreadsheets / d / 1ZPfB1DJD2LJIuSngU4NscziXJ3TCgTDtH-TS2_r7uBU / edit? usp = sharing

Большое спасибо за совет


person Ispanico    schedule 09.10.2019    source источник


Ответы (1)


Я написал этот сценарий, который делает то, что вы хотите. Я написал в нем несколько комментариев, чтобы вы могли ясно видеть, что происходит в каждой строке:

function onEdit(e) {
  // Getting info about the edited cell (sheet, row and column):
  var sheet = e.source.getActiveSheet();
  var sheet_name = sheet.getSheetName();
  var columnIndex = e.range.getColumn();
  var rowIndex = e.range.getRow();
  var foundItem = false; // Variable to keep track of whether the item was already present in Database
  if(sheet_name == "Plan" && columnIndex == 3 && rowIndex > 1) { // Checking whether the edited cell is a new amount from Plan
    // Getting info on the edited row:
    var row = sheet.getRange(rowIndex, 1, 1, 4).getValues();
    var itemNumber = row[0][0];
    var department = row[0][1];
    var newAmount = row[0][2];
    var targetSheet = e.source.getSheetByName("Database"); // Getting info from Database sheet
    var values = targetSheet.getDataRange().getValues();
    for(var i = 1; i < values.length; i++) { // Looping through all the rows in Database:
      if(itemNumber == values[i][0]) { // Checking whether item number from Plan matches the one in Database
        targetSheet.getRange(i + 1, 3).setValue(newAmount) // Setting new budget in database
        foundItem = true; // Item was found
      }
    }
  }
  // Appends new data if item was not found
  if(foundItem == false) {
    targetSheet.appendRow([itemNumber, department, newAmount]);
  }
}

Я надеюсь это тебе поможет!

person Iamblichus    schedule 10.10.2019
comment
Большое спасибо за вашу помощь, скрипт работает правильно !!! Спасибо за совет - person Ispanico; 11.10.2019