点击此处查看Sample Sheet
我需要一个将单元格值(Sheet1!Q5)与另一个标签/表格(NegotiationData!A1:O1)中的范围匹配的解决方案,并将从第一个工作表中获取的相关数据粘贴到第二个工作表的指定列下在匹配值下。
例如,如果Sheet1!Q5与 NegotiationData中的名称匹配! A1 然后执行以下操作
此外,每次脚本运行时,它都不应覆盖数据,而应查找下一个空行并粘贴值。
我有一个不完整的脚本,我试图通过各种帖子的研究来实现上述目标,但因为我只有一周的时间来编码,所以我不能再进行任何进一步的工作了。下面的脚本。 我没有找到如何匹配该值并获取相关数据并将其粘贴到匹配值下方。
请帮忙!
不完整/不正确的脚本(文件名:NegotiationSubmit)
function submitNegotiation() {
var sh, id, v, estNum, negotiation, negoNotes, i;
sh = SpreadsheetApp.getActive();
id = sh.getSheetByName('Sheet1').getRange('Q5').getValue();
v = sh.getRange('R6').getValue();
estNum = Number(sh.getRange('Q6').getValue().split(" ")[1]);
negoNotes = sh.getRange('Q7').getValue();
negotiation =sh.getSheetByName('NegotiationData').getRange('A1:O');
if(v && estNum) {
negotiation.setValues(negotiation.getValues()
.map(function (r, i) {
if (r[0] == id) {
r[1] = v;
r[2] = estNum;
r[3] = negoNotes;
}
return r;
})
)
}
}
答案 0 :(得分:2)
这次修改怎么样?
ids[0][i] == id
检索到的列数导入转换后的值。function submitNegotiation() {
var id, estNum, v, negoNotes;
var sh = SpreadsheetApp.getActive();
var values = sh.getSheetByName('Sheet1').getRange("Q5:R7").getValues();
[id] = values[0];
[estNum, v] = values[1];
[negoNotes] = values[2];
// estNum = Number(estNum.split(" ")[1]); // If you want to use "estNum = Number(sh.getRange('Q6').getValue().split(" ")[1]);", please use this line.
var sh2 = sh.getSheetByName('NegotiationData');
var ids = sh2.getRange("A1:O1").getValues();
for (var i=0; i<ids[0].length; i++) {
if (ids[0][i] == id) {
sh2.getRange(sh2.getLastRow() + 1, i + 1, 1, 3).setValues([[v, estNum, negoNotes]]);
}
}
}
我对以下几点感到困惑。
estNum
为Number(sh.getRange('Q6').getValue().split(" ")[1]);
。但是在您的示例电子表格中,使用了单元格“Q6”的Estimate 1
。
1
。但是在你的脚本中,它是单元格“R6”的US-001
。
US-001
。如果我误解了你的问题,我很抱歉。
function submitNegotiation() {
var id, estNum, v, negoNotes;
var sh = SpreadsheetApp.getActive();
var values = sh.getSheetByName('Sheet1').getRange("Q5:R7").getValues();
[id] = values[0];
[estNum, v] = values[1];
[negoNotes] = values[2];
estNum = Number(estNum.split(" ")[1]); // If you want to use "estNum = Number(sh.getRange('Q6').getValue().split(" ")[1]);", please use this line.
var sh2 = sh.getSheetByName('NegotiationData');
var ids = sh2.getRange("A1:O1").getValues();
for (var i=0; i<ids[0].length; i++) {
if (ids[0][i] == id) {
var temp = sh2.getRange(1, i + 1, sh2.getLastRow(), 3).getValues();
for (var j=temp.length-1; j>=0; j--) {
if (temp[j].join("") != "") {
sh2.getRange(j + 2, i + 1, 1, 3).setValues([[v, estNum, negoNotes]]);
break;
}
}
}
}
}
答案 1 :(得分:0)
我意识到这与你的代码不太相似。对于那个很抱歉。我也在学习。但无论如何我还是要提供一种替代方法,包括找到相应列的最后一行......
Weight Size Color_blue Color_yellow
2 9 1 0