Sistem tidak berhasil mengambil data peserta didik.
Langkah Perbaikan Cepat:
Izin Google Sheet: Buka Google Sheet Anda → klik tombol Bagikan (Share) → ubah Akses Umum menjadi "Siapa saja yang memiliki link" (Anyone with link can view).
Deploy Apps Script: Buka menu Deploy > Manage deployments → klik Edit (ikon pensil) → pastikan Execute as adalah "Me / Akun Saya" dan Who has access adalah "Anyone / Siapa saja".
Nama Sheet: Pastikan nama tab sheet di paling bawah adalah SCRIP (Huruf kapital).
Total Siswa
0
Terdaftarpada sheet SCRIP
Laki-Laki (L)
0
0% dari total peserta didik
Perempuan (P)
0
0% dari total peserta didik
Rombel / Kelas
0
Rata-rata: 0 siswa / kelas
Komposisi Gender
Distribusi Peserta Didik Per Kelas
NO
NIS
NISN
NAMA PESERTA DIDIK
L/P
KELAS
Menampilkan 0 - 0 dari 0 peserta didik
Panduan Integrasi & Solusi Data Tidak Muncul
Jika Data Tidak Muncul Pada URL Web App:
Pastikan Google Sheet sudah diset izinnya: Klik Share (Bagikan) di kanan atas Google Sheet → Anyone with the link (Siapa saja yang memiliki link).
Buka Apps Script → Klik Deploy > Manage deployments → Execute as: Me dan Who has access: Anyone.
Buka Spreadsheet Google Anda: 1g4v6vt1h5Ng-38RMwYyRI7hpk9zxtnKQCTcfQ0XQDDQ
Klik menu Ekstensi > Apps Script.
Di file Code.gs, hapus seluruh kode lama dan gunakan kode terbaru berikut:
Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('index')
.setTitle('Dashboard Peserta Didik - SMP Negeri 104 Jakarta')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
.addMetaTag('viewport', 'width=device-width, initial-scale=1');
}
function getStudentData() {
var sheetId = '1g4v6vt1h5Ng-38RMwYyRI7hpk9zxtnKQCTcfQ0XQDDQ';
var targetSheetName = 'SCRIP';
try {
var ss;
try {
ss = SpreadsheetApp.getActiveSpreadsheet();
} catch(err) {
// Jika tidak dalam mode container bound script
}
if (!ss) {
ss = SpreadsheetApp.openById(sheetId);
}
var sheet = ss.getSheetByName(targetSheetName);
// Fallback pencarian case-insensitive jika tab diberi nama scrip / Scrip
if (!sheet) {
var allSheets = ss.getSheets();
for (var i = 0; i < allSheets.length; i++) {
if (allSheets[i].getName().trim().toUpperCase() === targetSheetName.toUpperCase()) {
sheet = allSheets[i];
break;
}
}
}
if (!sheet) {
throw new Error('Sheet "' + targetSheetName + '" tidak ditemukan pada Spreadsheet.');
}
var data = sheet.getDataRange().getValues();
if (!data || data.length <= 1) return [];
// Deteksi baris header secara otomatis
var headerRowIdx = 0;
for (var r = 0; r < Math.min(data.length, 5); r++) {
var rowStr = data[r].join(' ').toUpperCase();
if (rowStr.indexOf('NAMA') !== -1 || rowStr.indexOf('NIS') !== -1) {
headerRowIdx = r;
break;
}
}
var headers = data[headerRowIdx].map(function(h) { return String(h).trim().toUpperCase(); });
var colNo = headers.findIndex(function(h) { return h.indexOf('NO') !== -1; });
var colNis = headers.findIndex(function(h) { return h.indexOf('NIS') !== -1 && h.indexOf('NISN') === -1; });
var colNisn = headers.findIndex(function(h) { return h.indexOf('NISN') !== -1; });
var colNama = headers.findIndex(function(h) { return h.indexOf('NAMA') !== -1; });
var colGender = headers.findIndex(function(h) { return h === 'L/P' || h === 'JK' || h.indexOf('KELAMIN') !== -1; });
var colKelas = headers.findIndex(function(h) { return h.indexOf('KELAS') !== -1 || h.indexOf('ROMBEL') !== -1; });
if (colNo === -1) colNo = 0;
if (colNis === -1) colNis = 1;
if (colNisn === -1) colNisn = 2;
if (colNama === -1) colNama = 3;
if (colGender === -1) colGender = 4;
if (colKelas === -1) colKelas = 5;
var result = [];
for (var k = headerRowIdx + 1; k < data.length; k++) {
var row = data[k];
var namaVal = row[colNama] ? String(row[colNama]).trim() : '';
if (!namaVal) continue;
var genderVal = row[colGender] ? String(row[colGender]).trim().toUpperCase() : '-';
if (genderVal.startsWith('L') || genderVal === '1') genderVal = 'L';
else if (genderVal.startsWith('P') || genderVal === '2') genderVal = 'P';
else genderVal = '-';
result.push({
no: row[colNo] || (result.length + 1),
nis: row[colNis] ? String(row[colNis]).trim() : '-',
nisn: row[colNisn] ? String(row[colNisn]).trim() : '-',
nama: namaVal.toUpperCase(),
gender: genderVal,
kelas: row[colKelas] ? String(row[colKelas]).trim() : '-'
});
}
return result;
} catch(e) {
throw new Error('Gagal membaca Spreadsheet: ' + e.message);
}
}
Buat file HTML baru bernama index.html di Apps Script.