Sheet1:DashBoard |范围:A7:B17
(B7:有一个过滤功能,显示BackEnd Sheet中所有打开任务的结果)
Sheet2:BackEnd |范围:J56:M
匹配 B7:B17与M56:M
如果有匹配则
粘贴值从A7:A17到J56:J
以下脚本执行上述操作,但仅在运行它的第一个实例上执行。试图重复这个过程并没有做任何事情。代码没有错误。
我是任何形式编码的初学者,下面的代码是通过参考论坛上的各种解决方案编写的。我可能在这里缺少一些逻辑而不能解码它以获得所需的最终结果。
提前致谢
function updateToDo2() {
var sh, toDo, status, update, i;
sh = SpreadsheetApp.getActive().getSheetByName('DashBoard')
toDo = sh.getRange('B7:B17').getValues();
status = sh.getRange('A7:A17').getValues();
update = SpreadsheetApp.getActive().getSheetByName('BackEnd').getRange('J56:M');
update.setValues(update.getValues()
.map(function(r, i) {
if (r[3] == toDo[i]) {
r[0] = status[i];
}
return r;
})
)
}
编辑:工作代码但速度很慢。 需要优化。 请帮忙!
function rowOfStatus(status) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('BackEnd');
var data = sheet.getRange('M56:M60').getValues();
for (var i = 0; i < data.length; i++) {
if (data[i][0] == status) { //[1] because column B
return i + 1;
}
}
}
function updateToDo() {
var sh, sh1, dashboard, results, noteText, status, i, counter;
sh = SpreadsheetApp.getActive().getSheetByName('DashBoard');
sh1 = SpreadsheetApp.getActive().getSheetByName('BackEnd');
dashboard = sh.getRange('A7:B11');
results = dashboard.getDisplayValues();
results.forEach(function(row) {
status = row[0];
noteText = row[1];
counter = Number(rowOfStatus(noteText));
if (counter > 0 && status != '') {
counter = 55 + Number(rowOfStatus(noteText));
sh1.getRange('J' + counter).setValue(status);
}
});
}
答案 0 :(得分:0)
我并不完全明白你在做什么,但我认为我会采取刺痛并试图帮助你。所以这可能不是你想要的。在那种情况下抱歉打扰你。
function updateToDo2() {
var sh=SpreadsheetApp.getActive().getSheetByName('DashBoard')
var toDo=sh.getRange('B7:B17').getValues();
var status=sh.getRange('A7:A17').getValues();
var update=SpreadsheetApp.getActive().getSheetByName('BackEnd').getRange('J56:M'+SpreadsheetApp.getActive().getSheetByName('BackEnd').getLastRow());
var vA=update.getValues();
for(var i=0;i<vA.length;i++){
if(vA[i][3]==toDo[i]){
vA[i][0]=status[i];
}
}
update.setValues(vA);
}
答案 1 :(得分:0)
我从Google文档帮助论坛获得优化此代码的帮助,由Jean-Pierre提供。自从我第一次在该论坛上发布了我的查询,并被建议在其社区成员的StackOverflow上发布我的查询。因此,这里是解决方案,以防它在这里帮助某人。这是短暂的&amp;很快!
<强>代码:强>
function updateToDo() {
var ss, arr, values, colB, backendValues, backendColM;
ss = SpreadsheetApp.getActive();
arr = [];
values = ss.getSheetByName('DashBoard').getRange('A7:B17').getValues()
colB = values.map(function (v) {
return v[1];
})
backendValues = ss.getSheetByName('BackEnd').getRange('J56:M').getValues()
backendColM= backendValues.map(function (bv) {return bv[3]}).forEach(function (el, i) {
arr[i] = (el && colB.indexOf(el) > -1) ? ['Closed', 'Cancelled'].indexOf(values[colB.indexOf(el)][0]) > -1 ? [values[colB.indexOf(el)][0]] : [backendValues[i][0]]
: [backendValues[i][0]];
})
ss.getSheetByName('BackEnd').getRange(56, 10, arr.length, 1).setValues(arr)
ss.getSheetByName('DashBoard').getRange('A7:A17').setValue(null);
}