Tujuanku
Saya mencoba menautkan baris dalam dua lembar berbeda di spreadsheet yang sama sesuai dengan nilai dalam sel. Ide dasarnya adalah jika nilai di kolom B di Sheet1 memiliki nilai yang cocok di kolom B di Sheet2, hyperlink harus ditambahkan ke sel dengan nilai yang cocok di Sheet1 yang menghubungkan ke seluruh baris nilai yang cocok di Sheet2.
Apa yang saya lakukan
Seperti yang Anda lihat dari kode di bawah ini, ia mencari kecocokan, jika ditemukan, ia mengedit nilai yang cocok untuk menambahkan hyperlink. Saya tidak hanya ingin memasukkan nilai yang cocok "tertaut" ke dalam array baru, saya juga ingin nilai yang tidak cocok tanpa tautan. Idenya adalah bahwa tautan akan ditambahkan jika ditemukan kecocokan, jika tidak, nilainya akan tetap ditambahkan, hanya saja tanpa tautan.
function linkToContacts(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Sheet1 = ss.getSheetByName("Sheet1");
var Sheet2 = ss.getSheetByName("Sheet2");
var Sheet2ID = Sheet2.getSheetId();
var arrSheet1 = Sheet1.getRange(4,2,Sheet1.getLastRow()-3).getValues(); // -3 because I have 3 row as headers before the data, which start in row 4 col B
var arrSheet2 = Sheet2.getRange(4,2,Sheet2.getLastRow()-3).getValues(); // -3 because I have 3 row as headers before the data, which start in row 4 col B
var arrOutput = [];
for(var i = 0; i<arrSheet1.length;i++){
for(var j = 0; j<arrSheet2.length;j++) {
if(arrSheet1[i][0] === arrSheet2[j][0]){
arrOutput.push(['=HYPERLINK("#gid=' + Sheet2ID + '&range=' + Sheet2.getRange(j+4,2,1,Sheet2.getLastColumn()-1).getA1Notation() + '";"' + arrSheet1[i][0] + '")']);
} else {
arrOutput.push([arrSheet1[i][0]]);
}
}
}
Sheet1.getRange(4,2,Sheet1.getLastRow()).clearContent();
Sheet1.getRange(4,2,arrOutput.length).setValues(arrOutput);
}
Masalah
Kedua array masing-masing hanya berisi nilai unik. Masalahnya adalah, karena loop ganda, setiap item diperiksa berdasarkan panjang arrSheet2. Jadi misalnya mari kita bayangkan skenario ini:
var arrSheet1 = [apple,avocado,banana];
var arrSheet2 = [apple,banana,mango,];
arrOutput
akan menghasilkan:
arrOutput = [
apple(link),apple,apple,
avocado,avocado,avocado,
banana(link),banana,banana
];
Dengan cara yang cepat, mungkin tidak elegan, untuk menyelesaikan masalah ini, saya telah mencoba menghapus duplikat dari arrOutput
tetapi yang jelas nilai dengan tautan dan nilai tanpanya berbeda sehingga yang terbaik yang bisa didapat dengan solusi ini adalah ini:
arrOutput = [
apple(link),apple,
avocado,
banana(link),banana
];
Pertanyaan
Apakah ada cara yang lebih cerdas/efisien untuk mencapainya
arrOutput = [apple(link),avocado,banana(link)];
atau seandainya apa yang saya lakukan benar-benar masuk akal, apa yang harus saya lakukan untuk mendapatkan hasil di atas?