使用脚本搜索并替换特定列中的新工作表

时间:2019-10-09 13:11:21

标签: google-apps-script google-sheets google-sheets-macros

请您帮忙解决以下问题。
在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中替换为新的金额(用新的5000替换旧的2000)。

我希望该脚本可以在“计划”工作表的所有具有值的行上工作,如果该脚本在“数据库”中找不到,则应始终在最后一行的最后一行中输入项目和值“数据库”。

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

非常感谢您的建议

1 个答案:

答案 0 :(得分:0)

我写了这个脚本来满足您的需求。我在其中写了一些评论,以便您可以清楚地看到每一行都在发生:

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

希望这对您有帮助!