这与我的上一个问题有点不同,但我无法将代码转移到这个问题上。
表 1 有带有公司名称的个人联系人。每个人都有一个名字,但公司名称可能会根据工作表中的个人数量出现多次。所以:
Name Company Work Address
John Smith ABC Company
Jim Smith XYZ Company
Bob Smith ABC Company
表 2 的公司及其工作地址:
Company Work Address
ABC Company 1234 Street, USA
XYZ Company 5678 Street, USA
如何编写脚本以使公司地址转到个人联系表?
我尝试过使用数组并搜索行/列索引,但我遗漏了一些东西。这段代码让我最接近,但不能让它工作(代码列和行号与示例不匹配,它们只是我正在尝试处理的当前数组,仅供参考):
function populateCofieldsincontact() {
var writeSheet = sskey.getSheetByName('POCs');
var sourceSheet = sskey.getSheetByName('Businesses');
var writeData = writeSheet.getRange(1, 6, writeSheet.getLastRow(), 5).getValues();Logger.log(writeData)
for (var w = 0; w < writeData.length; w++ ) {
var sourceData = sourceSheet.getRange(1, 2, sourceSheet.getLastRow(), 3).getValues();
var dest = [];
for (var i = 0; i < sourceData.length; i++ ) {
if (writeData ==sourceData[i][0].toString().match(writeData)) {
dest.push(sourceData[i][2]);
}
}
}
if (dest.length > 0 ) {
writeSheet.getRange(2,10,dest.length,1).setValue(dest.toString());
}
}
非常感谢任何帮助!
快速更新 - 我能够获取 setValue(不是由于某种原因无法工作的 setValues)并将地址写入正确的列,但我认为让它写入循环的唯一方法是使用 getLastRow,我只知道如何为工作表执行此操作。所以我最终将所有地址都放在了正确的列中,但是从实际数据的底部开始写成行。我不知道如何让它写入顶行,然后向下,呃。
最终(希望)代码:我在@Adam 代码的第 13 行[w][0]
第二次提到的旁边插入了一个,writeData
经过几次测试后它似乎可以正常工作。谢谢@Adam 和@Serge !!:
function populateCofieldsincontact() {
var writeSheet = sskey.getSheetByName('POCs');
var sourceSheet = sskey.getSheetByName('Businesses');
var writeData = writeSheet.getRange(2, 6, writeSheet.getLastRow() - 1).getValues();
var sourceData = sourceSheet.getRange(2, 2, sourceSheet.getLastRow(), 12).getValues();
var dest = [];
var temp;
for (var w = 0; w < writeData.length; w++) {
temp = null;
for (var i = 0; i < sourceData.length; i++) {
if (writeData[w][0] == sourceData[i][0].toString().match(writeData[w][0])) {
temp = sourceData[i][11];
break;
}
}
dest.push([temp]);
}
if (dest.length > 0 ) {
writeSheet.getRange(2, 13, dest.length, 1).setValues(dest); Logger.log(dest)
}
}