我用客戶訂單填充谷歌表。每一行都是訂單中的一個專案,因此同一訂單可能有多行。
如果訂單中的每個產品(C 列)的產品狀態為“已完成”(B 列),我想使用一個腳本來更新訂單狀態(A 列)。
例如,我的作業表如下所示:

在這種情況下,我需要將第 5 行和第 6 行(0rders 0002 和 0003)中的“Manufacturing”替換為“Ready To Ship”,因為它們滿足了完成特定訂單中所有專案的上述要求。
到目前為止,我有以下內容:
var active = SpreadsheetApp.getActive();
var sheet = active.getSheetByName("Incoming Orders");
var lastRow = sheet.getLastRow();
var myRange = sheet.getRange("A2:D" lastRow); //First row is header
var data = myRange.getValues();
for (var i = 0; i < data.length; i ){
if (data[i][1] === "Completed") {
var seenType = {};
if(seenType[data[i][2]]){
continue;
}
seenType[data[i][2]] = true;
sheet.getRange(i 2,1).setValue("Ready To Ship"); //First row is header
}
}
}
當我洗掉if (data[i][1] === "Completed")它時,它會為每個訂單號寫上“準備發貨”,但它不以訂單中的每個專案是否完成為條件:
function batchStatus() {
var active = SpreadsheetApp.getActive();
var sheet = active.getSheetByName("Incoming Orders");
var lastRow = sheet.getLastRow();
var myRange = sheet.getRange("A2:D" lastRow); //First row is header
var data = myRange.getValues();
var seenType = {};
for (var i = 0; i < data.length; i ){
if(seenType[data[i][2]]){
continue;
}
seenType[data[i][2]] = true;
sheet.getRange(i 2,1).setValue("Ready To Ship"); //First row is header
}
}
我對腳本很陌生,所以希望這不會離基地太遠。
uj5u.com熱心網友回復:
我相信你的目標如下。
使用示例影像時,您希望將“A5:A6”替換為“Ready To Ship”的值。
從您的以下回復中,
我提供了一個非常簡化的作業表示例。在我的原版中,我使用前 3 行作為標題。我可以看到這是多么令人困惑,所以我更新了我的問題,以便只有第一行是與示例匹配的標題。
- 您的顯示腳本似乎與您的實際腳本不同。所以,我擔心即使你的放映腳本被修改了,你的目標也可能無法實作。
如果使用示例影像修改了您的顯示腳本,那么以下修改如何?
修改后的腳本:
function batchStatus() {
var active = SpreadsheetApp.getActive();
var sheet = active.getSheetByName("Incoming Orders");
var lastRow = sheet.getLastRow();
var myRange = sheet.getRange("A2:D" lastRow);
var data = myRange.getValues();
// I modified below script.
var obj = data.reduce((o, r, i) => {
if (o[r[2]]) {
o[r[2]].values.push(r[1])
} else {
o[r[2]] = { values: [r[1]], cell: `A${i 2}` };
}
return o;
}, {});
var rangeList = Object.values(obj).filter(o => o.values.every(e => e == "Completed")).map(({ cell }) => cell);
sheet.getRangeList(rangeList).setValue("Ready To Ship");
}
在該修改中,首先創建一個物件作為“Order Nubmer”的鍵,并使用該物件創建一個范圍串列。然后,將 的值
Ready To Ship放入范圍串列中。當您的示例影像作業表與此修改后的腳本一起使用時,“Order Nubmer”的值將放入單元格“A5:A6”中。
參考:
- 減少()
- getRangeList(a1Notations)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418059.html
標籤:
