请您帮忙解决以下问题。
在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
非常感谢您的建议
答案 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]);
}
}
希望这对您有帮助!