使用脚本在特定列中搜索并替换新的 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]);
}
}
希望对您有所帮助!
请您帮忙解决以下问题
在 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]);
}
}
希望对您有所帮助!