Google sheet- kolom pencarian loop, pilih derek

Saya memiliki spreadsheet Google yang memiliki satu masalah terakhir yang sepertinya tidak dapat saya selesaikan.

saya menambahkan tombol ke skrip ini, dan ketika saya menekan tombol itu memicu fungsi AddClient.

Bagaimana saya bisa membuat skrip di bawah ini mengulang semua baris di kolom 3 mencari nilai yes, ketika menemukannya, salin baris di bawahnya ke lembar "klien" dan kemudian berhenti?

function AddClient(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "SETUP" && r.getColumn() == 3 && r.getValue() == "yes")     {
    var row = r.getRow() + 1; // Add 1 to the active row
    var targetSheet = ss.getSheetByName("client");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 2, 1, 4).copyTo(target,  {contentsOnly:true}); //Only selecting column 2, then the following 4 columns
  }
}

Sunting* Contoh dokumen: https://docs.google.com/spreadsheets/d/1DFbAp0IN8_UFv9u8kWiZBTxDogj4e7FnuAPzC0grDw0/edit?usp=sharing

Bantuan apa pun sangat dihargai!

Selamat, Reiel


person Latent-code    schedule 04.04.2017    source sumber
comment
Interaksi apa yang ingin Anda rancang? seseorang memasukkan ya ke kolom tiga dan baris tersebut disalin ke lembar lain?   -  person Robin Gertenbach    schedule 04.04.2017
comment
maaf, sekarang saya kurang jelas, apakah Anda memiliki satu tombol dan skrip akan menyalin semuanya dengan ya atau selalu ada ya di mana-mana dan Anda memiliki tombol untuk setiap baris?   -  person Robin Gertenbach    schedule 04.04.2017
comment
Mungkin tangkapan layar atau bahkan contoh spreadsheet dapat membantu   -  person Robin Gertenbach    schedule 04.04.2017
comment
Maaf karena tidak membereskan apa pun :P saya edit lagi, tambahkan contoh dokumen yang sama persis dengan milik saya tetapi nama datanya berbeda.   -  person Latent-code    schedule 04.04.2017
comment
Terima kasih, itu membuatnya lebih mudah, silakan lihat jawaban saya   -  person Robin Gertenbach    schedule 04.04.2017


Jawaban (1)


  • Karena Anda memiliki formulir statis, posisi informasi yang akan disalin tidak akan berubah
  • Karena kami tahu kami ingin menyalin data, kami tidak perlu melakukan validasi apa pun di mana kami berada sehingga semua hal itu dapat dilakukan
  • Spreadsheet memiliki metode appendRow yang menangani pembukuan terkait pencarian baris terakhir

Hal ini memungkinkan kita untuk menyederhanakan skrip sebagai berikut:

function AddClient() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
  ss.getSheetByName("client").appendRow(data);
}

Sunting: Untuk menghapus duplikat, Anda dapat melakukan hal berikut:

function AddClient() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
  var clients = ss.getSheetByName("client").getDataRange().getValues();

  if (!clients.filter(function(row) {return data.join("|") === row.join("|");})) {
    ss.getSheetByName("client").appendRow(data);
  }  
}

Perhatikan bahwa untuk contoh tertentu ada beberapa masalah karena angka nol di depannya terpotong. Spreadsheet agak aneh dan terkadang mencoba memaksakan format menjadi angka meskipun Anda mengatur format sel ke Teks...

person Robin Gertenbach    schedule 04.04.2017
comment
solusi yang sangat bagus, karena saya mengubah arah dengan tombol setengah jalan, saya punya ide bahwa itu bisa banyak dioptimalkan.. Terima kasih banyak! Apakah mungkin untuk memeriksa entri ganda dan mengedit format output? - person Latent-code; 04.04.2017
comment
Terima kasih telah meluangkan waktu untuk membantu hal ini! Skrip yang seharusnya mendeteksi duplikat tidak berfungsi. bahkan tidak menambahkan data baru. Juga, ketika saya menggunakan: '.copyTo(target, {contentsOnly:true})', contentOnly menyelesaikan pemformatan untuk saya.. Apakah itu solusi yang lebih baik untuk mencapai apa yang saya butuhkan? Karena ini adalah tawaran untuk pelanggan, pemformatannya cukup penting. mungkin yang paling penting adalah angka 0 di kode pos. - person Latent-code; 04.04.2017