Cara mengisi beberapa lembar setiap kali Google Form dikirimkan

Saya telah membuat Skrip Aplikasi yang sangat sederhana yang berdasarkan jawaban yang diberikan melalui Formulir Google, membuat salinan templat (lembar dalam formulir jawaban spreadsheet) dan mengisinya dengan info yang dimasukkan. Ini adalah bagian dari kode:

function fichas() {
var formato = SpreadsheetApp.getActiveSpreadsheet();
var ficha = formato.duplicateActiveSheet();
var respuestas = SpreadsheetApp.openById('ID').getSheetByName('Form Responses');

var name = respuestas.getRange(**2**, 5);
var apellido = ficha.getRange(4, 2);
name.copyTo(apellido);

var name2 = respuestas.getRange(**2**, 6);
var apellido2 = ficha.getRange(4, 3);
name2.copyTo(apellido2);

Angka yang dicetak tebal mewakili informasi pengguna pertama. Saya telah menyiapkan pemicu yang menjalankan skrip saat formulir dikirimkan. Sekarang, yang saya tidak tahu caranya adalah bagaimana berpindah ke baris berikutnya untuk menggunakan info pengguna berikutnya (dengan kata lain saya ingin secara otomatis menambah angka tebal itu sebanyak satu setiap kali skrip dijalankan). Apa itu mungkin? Saya baru dalam hal ini dan saya mencoba mempelajarinya tetapi terkadang terlalu sulit!

Saya sangat menghargai bantuan Anda!

Jorge


person user2578210    schedule 16.07.2013    source sumber


Jawaban (1)


Anda harus menggunakan variabel yang umum untuk semua pengguna dan Anda bertambah pada setiap pengiriman formulir. Ada beberapa cara yang mungkin untuk mencapai hal tersebut, mengapa tidak mencoba script Properties ? penerapannya cukup mudah :

Pertama inisialisasi dengan pernyataan seperti ini:

ScriptProperties.setProperty('rowValue', 1);// this must happen only once, you could insert it in a small function to "initialize"

dan kemudian dalam kode Anda, Anda dapat mengambilnya menggunakan

var rowValue = Number(ScriptProperties.getProperty('rowValue'));

tingkatkan menggunakan rowValue++ dan tulis kembali ke penyimpanan ... ingat bahwa Anda selalu dapat mengedit nilai ini langsung di properti skrip (editor skrip>file>properti proyek> properti proyek)

ScriptProperties.setProperty('rowValue', rowValue);

Ini akan sempurna jika Anda tidak pernah mendapatkan lebih dari satu pengguna mengirimkan formulir secara bersamaan. Dalam hal ini ada risiko skrip mencampurkan nilai...

Ada layanan lain yang dirancang untuk menangani situasi ini: layanan kunci

dokumen memberikan contoh eksplisit tentang cara menerapkannya: seperti ini:

 var lock = LockService.getPublicLock();
 try {
   lock.waitLock(10000);
 } catch (e) {
   Logger.log('Could not obtain lock after 10 seconds.');
 }

lakukan apa yang harus Anda lakukan, tambah penghitungnya... dan setelah selesai digunakan

lock.releaseLock();

ini mungkin tampak rumit tetapi sebenarnya tidak ;-) dan ini akan bekerja dengan sempurna di setiap situasi yang mungkin terjadi... cobalah saja.

person Serge insas    schedule 16.07.2013
comment
Terima kasih banyak atas bantuan Anda! Seperti yang saya sebutkan sebelumnya, saya sedang belajar melakukan ini dan saya tidak punya pengalaman dalam pemrograman sama sekali... Sejujurnya saya mencoba melakukan apa yang Anda sarankan tetapi tidak begitu jelas bagi saya bagaimana melakukannya, jadi jelas saya tidak bisa melakukannya itu berhasil. Bisakah bantu saya? Saya sangat menghargai waktu dan usaha Anda! - person user2578210; 18.07.2013
comment
Apa yang Anda maksud dengan 'tulis kembali ke penyimpanan'? Saya dapat membuat skrip mengisi template saya tetapi saya tidak dapat meningkatkan rowValue untuk template berikutnya. - person user2578210; 19.07.2013