[英]Find and replace based on criteria with Google Apps Scripts Code
我在同一個電子表格 object 中有兩個 Google 表格,作為參考,我將它們稱為數據和更改日志。
Data Sheet
ID Country Attribute Value
1 USA X 100
2 RUS X 77
3 MEX Y 32
4 GER Z 111
...
Change-Log Sheet
Country Attribute Value
USA X 84
GER Z 97
Updated Data Sheet
ID Country Attribute Value
1 USA X 84
2 RUS X 77
3 MEX Y 32
4 GER Z 97
...
目前我正在通過 API 進入數據表,該數據表每月清除和更新。
理想情況下,我想編寫某種幫助程序 function,它可以查詢數據表以獲取兩個表之間共享的條目,並用更改日志中的相應值覆蓋數據表中的值。
在上面的示例中,我想查詢 Country 和 Indicator 變量在哪里相同,然后比較 Value 變量並通過在適當的地方將該值覆蓋到數據表中來優先選擇 Change-Log.Value 條目。
我們對您的床單外觀和您想要做什么的信息很少。 你可以這樣做:
function test() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const dataSheet = ss.getSheetByName("Data");
const dataRange = dataSheet.getRange(2, 1, dataSheet.getLastRow() - 1, 4);
const dataValues = dataRange.getValues(); // Get at once, faster execution
const changeLogSheet = ss.getSheetByName("Change-Log");
const replacements = changeLogSheet.getRange(2, 1, changeLogSheet.getLastRow() - 1, 3).getValues(); // Faster
const newValues = [];
dataValues.forEach(row => {
const replacementValue = getReplacementValue_(row[1], row[2], replacements);
newValues.push([row[0], row[1], row[2], (replacementValue ? replacementValue : row[3])]);
});
dataRange.setValues(newValues); // Faster
}
function getReplacementValue_(country, attribute, replacements) {
const matchingRows = replacements.filter(row => row[0] == country && row[1] == attribute);
return matchingRows.length > 0 ? matchingRows[0][2] : null;
}
我不確定您是要每次都覆蓋所有數據,還是從某行開始。
注意 1:如果您的問題是“這是我的目標和代碼到目前為止,這些是錯誤和問題”的形式,Stack Overflow 社區將能夠為您提供更多幫助。 如果您問“如何做某事”,我們將無法為您提供太多幫助。
注意2:如果某些答案對您有幫助,請投票/接受。 如果沒有,請編輯您的問題以提供更多信息。 在這種情況下,如果您可以制作一份工作表副本(如果數據敏感,則用模擬數據替換)並與互聯網上的任何人共享並在您的問題中發布鏈接,那將是一件好事。 諸如“數據”表、“更改日志”表和“所需數據”表之類的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.