Google Form Dropdown Dynamic dan Membuat Folder Otomatis Setiap Submit Sesuai Nama
1. Copy Spreadsheet Data Dropdown yang akan ditampilkan pada Google Form (Klik Disini)
2. Copy contoh Google Form (Klik Disini)
3. Karena terdapat pertanyaan bertipe upload file maka setelah mengcopy Google Form di atas akan muncul pemberitahuan untuk memulihkan folder sebagai tempat penyimpanan file. Silahkan klik Pulihkan/Restore
Setelah berhasil dipulihkan/restore maka pada Google Drive akan ada folder baru untuk menyimpan berkas.
4. Kembali pada Google Form, pilih menu Jawaban/Responses dan hubungan ke Spreadsheet untuk menyimpan data dari Google Form.
5. Buatlah lembar kerja Apps Script dengan cara klik titik 3 (tiga) di pojok kanan atas lalu pilih Script editor/Editor skrip
6. Pada lembar kerja Apps Script terdapat 1 file default itu Kode.gs / Code.gs
7. Copy dan pastekan script di bawah ini ke Kode.gs / Code.gs
Masukkan Password Untuk Melihat Script (Password ada di dalam video)
//Source Code by www.javabitpro.com
// Fungsi untuk mengisi dropdown di Google Form
function onOpen() {
var form = FormApp.openById('ID_GoogleForm'); // Ganti dengan ID form Anda
var sheet = SpreadsheetApp.openById('ID_Spreadsheet_DataDropdown'); // Ganti dengan ID spreadsheet Anda
// Ambil data dari spreadsheet tanpa duplikat
var kotaItems = getUniqueJavabitproColumnValues(sheet, 'Kota', 1); // Ambil semua data unik dari kolom Kota (kolom A)
var kecamatanItems = getUniqueJavabitproColumnValues(sheet, 'Kota', 2); // Ambil semua data unik dari kolom Kecamatan (kolom B)
var desaItems = getUniqueJavabitproColumnValues(sheet, 'Kota', 3); // Ambil semua data unik dari kolom Desa (kolom C)
// Isi dropdown Kota
var kotaDropdown = form.getItems(FormApp.ItemType.LIST).filter(function(item) {
return item.getTitle() === 'Kota'; // Ganti dengan nama field Kota Anda di form
})[0].asListItem();
kotaDropdown.setChoiceValues(kotaItems);
// Isi dropdown Kecamatan
var kecamatanDropdown = form.getItems(FormApp.ItemType.LIST).filter(function(item) {
return item.getTitle() === 'Kecamatan'; // Ganti dengan nama field Kecamatan Anda di form
})[0].asListItem();
kecamatanDropdown.setChoiceValues(kecamatanItems);
// Isi dropdown Desa
var desaDropdown = form.getItems(FormApp.ItemType.LIST).filter(function(item) {
return item.getTitle() === 'Desa'; // Ganti dengan nama field Desa Anda di form
})[0].asListItem();
desaDropdown.setChoiceValues(desaItems);
}
// Fungsi untuk mengambil semua nilai unik dari kolom tertentu di sheet
function getUniqueJavabitproColumnValues(sheet, sheetName, column) {
var data = sheet.getSheetByName(sheetName).getRange(2, column, sheet.getLastRow()-1, 1).getValues();
var uniqueSet = new Set(data.map(function(row) { return row[0]; })); // Menggunakan Set untuk mendapatkan nilai unik
return Array.from(uniqueSet); // Kembalikan sebagai array nilai unik
}
// Fungsi untuk menangani pengisian form dan mengelola file upload
const FOLDER_ID = 'ID_Folder'
const onFormSubmit = ({ response } = {}) => {
try {
const files = response
.getItemResponses()
.filter((itemResponse) => itemResponse.getItem().getType().toString() === 'FILE_UPLOAD')
.map((itemResponse) => itemResponse.getResponse())
.reduce((a, b) => [...a, ...b], []);
if (files.length > 0) {
const subfolderName = response.getItemResponses()[0].getResponse()
const parentFolder = DriveApp.getFolderById(FOLDER_ID);
var subfolder = parentFolder.getFoldersByName(subfolderName);
if(subfolder.hasNext()) subfolder = subfolder.next()
else subfolder = parentFolder.createFolder(subfolderName)
files.forEach((fileId) => {
DriveApp.getFileById(fileId).moveTo(subfolder);
});
}
} catch (f) {
Logger.log(f);
}
};
//Source Code by www.javabitpro.com
// Fungsi untuk mengisi dropdown di Google Form
function onOpen() {
var form = FormApp.openById('ID_GoogleForm'); // Ganti dengan ID form Anda
var sheet = SpreadsheetApp.openById('ID_Spreadsheet_DataDropdown'); // Ganti dengan ID spreadsheet Anda
// Ambil data dari spreadsheet tanpa duplikat
var kotaItems = getUniqueJavabitproColumnValues(sheet, 'Kota', 1); // Ambil semua data unik dari kolom Kota (kolom A)
var kecamatanItems = getUniqueJavabitproColumnValues(sheet, 'Kota', 2); // Ambil semua data unik dari kolom Kecamatan (kolom B)
var desaItems = getUniqueJavabitproColumnValues(sheet, 'Kota', 3); // Ambil semua data unik dari kolom Desa (kolom C)
// Isi dropdown Kota
var kotaDropdown = form.getItems(FormApp.ItemType.LIST).filter(function(item) {
return item.getTitle() === 'Kota'; // Ganti dengan nama field Kota Anda di form
})[0].asListItem();
kotaDropdown.setChoiceValues(kotaItems);
// Isi dropdown Kecamatan
var kecamatanDropdown = form.getItems(FormApp.ItemType.LIST).filter(function(item) {
return item.getTitle() === 'Kecamatan'; // Ganti dengan nama field Kecamatan Anda di form
})[0].asListItem();
kecamatanDropdown.setChoiceValues(kecamatanItems);
// Isi dropdown Desa
var desaDropdown = form.getItems(FormApp.ItemType.LIST).filter(function(item) {
return item.getTitle() === 'Desa'; // Ganti dengan nama field Desa Anda di form
})[0].asListItem();
desaDropdown.setChoiceValues(desaItems);
}
// Fungsi untuk mengambil semua nilai unik dari kolom tertentu di sheet
function getUniqueJavabitproColumnValues(sheet, sheetName, column) {
var data = sheet.getSheetByName(sheetName).getRange(2, column, sheet.getLastRow()-1, 1).getValues();
var uniqueSet = new Set(data.map(function(row) { return row[0]; })); // Menggunakan Set untuk mendapatkan nilai unik
return Array.from(uniqueSet); // Kembalikan sebagai array nilai unik
}
// Fungsi untuk menangani pengisian form dan mengelola file upload
const FOLDER_ID = 'ID_Folder'
const onFormSubmit = ({ response } = {}) => {
try {
const files = response
.getItemResponses()
.filter((itemResponse) => itemResponse.getItem().getType().toString() === 'FILE_UPLOAD')
.map((itemResponse) => itemResponse.getResponse())
.reduce((a, b) => [...a, ...b], []);
if (files.length > 0) {
const subfolderName = response.getItemResponses()[0].getResponse()
const parentFolder = DriveApp.getFolderById(FOLDER_ID);
var subfolder = parentFolder.getFoldersByName(subfolderName);
if(subfolder.hasNext()) subfolder = subfolder.next()
else subfolder = parentFolder.createFolder(subfolderName)
files.forEach((fileId) => {
DriveApp.getFileById(fileId).moveTo(subfolder);
});
}
} catch (f) {
Logger.log(f);
}
};
Sesuaikan ID_GoogleForm dan sesuaikan ID_Spreadsheet_DataDropdown
Sesuaikan juga ID_Folder dengan Id Folder Responses yang ada pada Google Drive
8. Klik ikon Save
9. Buatlah Triggers/Pemicu baru untuk mengisi dropdown secara otomatis dan membuat folder otomatis. Klik ikon jam di sebelah kiri editor Apps Script pilih Triggers/Pemicu lalu klik Tambah Pemicu/Add Triggers
10. Buatlah Triggers/Pemicu untuk fungsi onOpen() dan set sebagai On Open. (Samakan dengan gambar di bawah).
11. Silahkan lakukan perijinan akses jika diminta (Tutorial ada di video).
12. Buatlah Triggers/Pemicu untuk fungsi onFormSubmit dan set sebagai On form submit. (Samakan dengan gambar di bawah).
13. Sehingga ada 2 Triggers/Pemicu yang aktif.
14. Kembali ke Editor, jalankan fungsi onOpen()
15. Google Form siap digunakan.
NOTE : Apabila Data Pada Spreadsheet Dropdown Diperbaruhi/Diedit, Agar Data Dropdown Pada Google Form Juga Terupdate Maka Jalankan Fungsi onOpen(). Step nomor 14 di atas
SELESAI!!!