使用脚本在特定列中搜索并替换新的 sheet

Search and replace in a new sheet in a specific column with script

请您帮忙解决以下问题
在 Google spreadsheet 中,我有一个名为 "Database" 的 sheet,它具有以下数据:

 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

我有另一个名为 "Plan" 的 sheet,它具有以下内容:

Item      Department  New Amount
B3232323    Germany     5000
D5046506    Spain       2000

在 sheet "Plan" 中,我会在 C2(新金额)中输入一个金额,例如 5000,我想要一个在同一行上搜索的脚本(A2) sheet "Database" 中的项目 B3232323 并在 "Database" 列 C 中替换为新金额(将旧的 2000 替换为新的 5000)。

我希望该脚本适用于 sheet "Plan" 中所有具有值的行,如果脚本在 "Database" 中找不到,则项目和值应该始终在 "Database".

末尾的最后一行中输入

文件的link如下: https://docs.google.com/spreadsheets/d/1ZPfB1DJD2LJIuSngU4NscziXJ3TCgTDtH-TS2_r7uBU/edit?usp=sharing

非常感谢您的建议

我写了这个脚本来做你想要的。我在其中写了一些评论,以便您可以清楚地看到每一行都发生了什么:

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]);
  }
}

希望对您有所帮助!