这里完全是自学成才的绝对初学者,所以请多多包涵。
我正在编写一个脚本,它将更改特定单元格的值,前提是它在其他工作表中找到一个匹配项(实际上是两个匹配项-因此需要满足两个条件)。
共有4张-“经理”和3张“操作员”。想法是,当操作员将其订单部分的状态更改为“完成”时,经理将在工作表中看到此情况。脚本查找匹配的订单号,然后检查状态,最后更改经理表中的单元格。完成的过程带有感叹号。
这是我到目前为止所得到的:
function orderprogress() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var mngr = ss.getSheetByName("MANAGER");
var oprt1 = ss.getSheetByName("OPERATOR1");
var oprt2 = ss.getSheetByName("OPERATOR2");
var oprt3 = ss.getSheetByName("OPERATOR3")
var datam = sklep.getDataRange().getValues();
var datao1 = magazyn.getDataRange().getValues();
var datao2 = pila.getDataRange().getValues();
var datao3 = laser.getDataRange().getValues();
for (var i = 0; i < datam.length; i++) //manager
for (var i3 = 0; i3 < datao1.length; i3++) //operator 1
for (var i4 = 0; i4 < datao2.length; i4++) //operator 2
for (var i5 = 0; i5 < datao3.length; i5++) //operator 3
{
var datam2 = datam[i];
for (var i2 = 0; i2 < datam2.length; i2++) { //manager - columns
if (datao1[i3][3] == datam[i][0] && datao1[i3][0] == "DONE" && datam2[i2] == "O1") { //check for matching order number in column D, then check status in column A and look for operator 1's "process"
sklep.getRange(i + 1, i2 + 1).setValue("O1!");
} else if (datao1[i3][3] == datam[i][0] && datao1[i3][0] !== "DONE" && datam2[i2] == "O1!") { //checking back op1
sklep.getRange(i + 1, i2 + 1).setValue("O1"); //(in case someone marked the process as finished and then marked it back as unfisnihed)
} else if (datao2[i4][4] == datam[i][0] && datao2[i4][0] == "DONE" && datam2[i2] == "O2") { //is op 2 done?
sklep.getRange(i + 1, i2 + 1).setValue("O2!");
} else if (datao2[i4][4] == datam[i][0] && datao2[i4][0] !== "DONE" && datam2[i2] == "O2!") { //checking back op2
sklep.getRange(i + 1, i2 + 1).setValue("O2");
} else if (datao3[i5][6] == datam[i][0] && datao3[i5][0] == "DONE" && datam2[i2] == "O3") { //is op 3 done?
sklep.getRange(i + 1, i2 + 1).setValue("O3!");
} else if (datao3[i5][6] == datam[i][0] && datao3[i5][0] !== "DONE" && datam2[i2] == "O3!") { //checking back op3
sklep.getRange(i + 1, i2 + 1).setValue("O3");
}
}
}
}
我知道它过于复杂和丑陋,这就是为什么要花很多时间来运行的原因。关于如何简化的任何提示?只能在特定的列(例如D-K)中找到过程(“ O1”,“ O2”,“ O3”),因此也许将搜索范围限制为那些可以使其运行更快?
感谢所有帮助。