這與我上一個問題有點不同,但無法將代碼轉換爲此。根據匹配值將數據複製到另一個表單中
表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
我如何腳本,使該公司的地址去到各個接觸片?
我試過使用數組,並尋找行/ col索引,但我失去了一些東西。這段代碼讓我走得最近,但不能使它工作(代碼列和行號與示例不匹配,它們只是我正在嘗試使用的當前陣列,fyi):
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,我只知道如何爲表單做這件事。所以我打算把所有的地址放在正確的列中,但是從實際數據的底部開始寫入行。我無法弄清楚如何讓它寫入最上面一行,然後向下,呃。
FINAL(希望)代碼:我插一個[w][0]
旁邊writeData
第二提上@亞當的代碼行13,似乎一些測試後進行工作。謝謝@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)
}
}
嗨,亞當,我認爲你說得對!只有一個細節:可以刪除最後一個IF語句,因爲dest數組永遠不會爲空,因爲空值和它的方括號在那裏作爲默認值...... - 乾杯 –
是的真正的Serge,我把它留在那裏以防萬一OP因爲某個原因想要它,但是你是對的,它確實沒有任何用處。也許我們可以這樣做:if(writeSheet.getLastRow()<2)return;'在開始時檢查writeSheet中是否有數據。 – AdamL
@AdamL我試了一下,什麼都沒有發生。根據我登錄的日誌,我的日誌顯示沒有數據或空數組。猜猜這是無法完成的。 – user1783229