Langkah 1: Struktur Tabel Google Sheets
Buatlah Google Spreadsheet baru dengan header kolom persis di baris pertama sebagai berikut:
| A |
B |
C |
D |
E |
F |
G |
H |
I |
| nisn |
tanggal_lahir |
nama |
nis |
no_peserta |
tempat_lahir |
nama_ortu |
status |
foto_url |
| 3132179967 |
2013-02-28 |
ALIF HAFIZZAL |
2931 |
2606750001 |
JAKARTA |
HELMY |
LULUS |
https://... |
Format tanggal lahir pada kolom B harus diseragamkan bertipe teks atau berformat YYYY-MM-DD (Contoh: 2013-02-28).
Langkah 2: Tulis Google Apps Script (Mendukung Admin CRUD)
Buka menu Ekstensi > Apps Script pada Spreadsheet Anda, gantikan seluruh kodenya dengan kode berikut:
function doGet(e) {
var params = e.parameter;
var action = params.action || "search";
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
if (action === "search") {
var nisnQuery = params.nisn;
var dateQuery = params.date; // Format YYYY-MM-DD
var result = null;
for(var i = 1; i < data.length; i++) {
var row = data[i];
var rawNisn = String(row[0]).trim();
var rawDate = formatDate(row[1]);
if(rawNisn === String(nisnQuery).trim() && rawDate === String(dateQuery).trim()) {
result = getStudentObject(row);
break;
}
}
return jsonResponse(result ? { success: true, data: result } : { success: false, message: "Data tidak ditemukan!" });
}
if (action === "list") {
var list = [];
for(var i = 1; i < data.length; i++) {
list.push(getStudentObject(data[i]));
}
return jsonResponse({ success: true, data: list });
}
}
function doPost(e) {
var postData;
try {
postData = JSON.parse(e.postData.contents);
} catch(err) {
return jsonResponse({ success: false, message: "Invalid JSON payload" });
}
var action = postData.action || "save";
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
var nisn = String(postData.nisn).trim();
if (action === "delete") {
for(var i = 1; i < data.length; i++) {
if(String(data[i][0]).trim() === nisn) {
sheet.deleteRow(i + 1);
return jsonResponse({ success: true, message: "Data berhasil dihapus!" });
}
}
return jsonResponse({ success: false, message: "Siswa tidak ditemukan untuk dihapus!" });
}
// Skenario: Save / Update
var foundRowIndex = -1;
for(var i = 1; i < data.length; i++) {
if(String(data[i][0]).trim() === nisn) {
foundRowIndex = i + 1; // 1-based index
break;
}
}
var rowData = [
nisn,
postData.tanggal_lahir,
postData.nama,
postData.nis,
postData.no_peserta,
postData.tempat_lahir,
postData.nama_ortu,
postData.status,
postData.foto_url
];
if (foundRowIndex > -1) {
sheet.getRange(foundRowIndex, 1, 1, 9).setValues([rowData]);
} else {
sheet.appendRow(rowData);
}
return jsonResponse({ success: true, message: "Data berhasil disimpan!" });
}
function formatDate(val) {
if (val instanceof Date) {
var d = val;
var month = '' + (d.getMonth() + 1);
var day = '' + d.getDate();
var year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
}
return String(val).trim();
}
function getStudentObject(row) {
return {
nisn: String(row[0]).trim(),
tanggal_lahir: formatDate(row[1]),
nama: row[2],
nis: row[3],
no_peserta: row[4],
tempat_lahir: row[5],
nama_ortu: row[6],
status: row[7],
foto_url: row[8] || ""
};
}
function jsonResponse(obj) {
return ContentService.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
Langkah 3: Deploy sebagai Aplikasi Web
- Di jendela Apps Script, klik tombol Terapkan (Deploy) > Penerapan baru (New deployment).
- Pilih jenis penerapan: Aplikasi web (Web app).
- Isi deskripsi bebas, lalu atur Akses: Siapa saja (Anyone).
- Klik Terapkan (Deploy), lalu setujui otorisasi jika diminta.
- Salin URL Aplikasi Web (Web app URL) yang didapatkan.
Langkah 4: Hubungkan ke Web ini
Masukkan URL Web App dari Google Apps Script Anda ke kotak input di bawah ini agar web langsung sinkron dengan Google Sheets Anda:
Saat ini web menggunakan mode: Demo (Data Lokal)