Home » Artikel Indonesia » Tutorial Membuat Dashboard Tracking Proyek Super Canggih Pakai Google Apps Script & Google Sheets
Artikel Indonesia

Tutorial Membuat Dashboard Tracking Proyek Super Canggih Pakai Google Apps Script & Google Sheets

March 22, 2026 oleh Marga Bagus 18 menit baca
Tutorial membuat dashboard tracking proyek otomatis dengan Google Apps Script dan Google Sheets

Lebih dari 14 juta dashboard berbasis Google Sheets dibuat setiap bulannya oleh para profesional analitik di seluruh dunia [1], dan angka itu terus tumbuh seiring meningkatnya kesadaran bahwa tools manajemen proyek tidak harus selalu berbayar mahal. Ironisnya, banyak tim masih merogoh kocek puluhan juta rupiah per tahun untuk berlangganan perangkat lunak seperti Asana, Monday.com, atau Jira, padahal Google Workspace yang sudah digunakan oleh lebih dari 3 miliar pengguna aktif per bulan [2] sebenarnya menyimpan potensi yang jauh melampaui sekadar spreadsheet biasa. Tutorial ini hadir untuk membuktikan bahwa dashboard tracking proyek yang benar-benar otomatis, lengkap dengan notifikasi email, pembaruan status real-time, dan deteksi keterlambatan, bisa dibangun sepenuhnya menggunakan Google Apps Script dan Google Sheets, dari nol, gratis, dan bisa dikustomisasi sesuai kebutuhan spesifik tim siapapun. Mari ikuti setiap langkahnya sampai tuntas.

Mengapa Google Sheets Menjadi Pilihan Terbaik untuk Dashboard Tracking Proyek

Tim profesional Indonesia berkolaborasi menggunakan Google Sheets secara real-time untuk manajemen proyek
Google Sheets memungkinkan seluruh tim bekerja dalam satu dokumen secara bersamaan dengan pembaruan data real-time

Sebelum menyangkutkan stigma “spreadsheet sederhana” pada Google Sheets, ada baiknya melihat fakta yang berbicara lebih keras dari asumsi. Berdasarkan data statistik per 2025, total pengguna aktif Google Sheets di seluruh dunia telah menembus angka 1,1 miliar [1], dengan lebih dari 87 persen di antaranya aktif memanfaatkan fitur kolaborasi real-time yang memungkinkan seluruh anggota tim bekerja dalam satu dokumen secara bersamaan, tanpa perlu mengirim file bolak-balik lewat email. Tidak ada perangkat lunak manajemen proyek berbayar yang bisa menandingi tingkat aksesibilitas itu, karena Google Sheets bisa dibuka dari perangkat apapun, di mana saja, tanpa instalasi.

Yang membuat kombinasi Google Sheets dan Google Apps Script benar-benar istimewa adalah sifat serverless dari Apps Script itu sendiri. Menurut dokumentasi resmi Google, Apps Script adalah satu-satunya platform low-code yang membuat pengembangan solusi bisnis terintegrasi di seluruh ekosistem Google Workspace menjadi cepat dan mudah, bahkan bagi mereka yang tidak memiliki latar belakang pengembangan perangkat lunak profesional [3]. Artinya, tidak perlu membayar biaya hosting server, tidak perlu mengelola infrastruktur, dan tidak perlu khawatir soal skalabilitas karena Google yang mengurus semua itu di background.

Dari sisi biaya, argumennya sangat jelas. Google Sheets sepenuhnya gratis untuk penggunaan personal dan sudah termasuk dalam setiap paket Google Workspace, sementara Google Apps Script tersedia gratis bagi siapapun yang memiliki akun Gmail [3]. Bandingkan dengan biaya berlangganan perangkat lunak manajemen proyek kelas enterprise yang bisa mencapai ratusan ribu hingga jutaan rupiah per pengguna per tahun, memiliki sistem yang setara dengan kemampuan yang bisa dikustomisasi penuh menjadi keunggulan kompetitif yang sangat nyata bagi tim manapun.

Merancang Struktur Sheet yang Menjadi Fondasi Dashboard Tracking

Tampilan Google Sheets dengan beberapa tab sheet berwarna untuk sistem dashboard tracking proyek
Empat sheet terpisah dengan fungsi berbeda menjadi fondasi arsitektur dashboard tracking proyek yang solid

Langkah pertama yang paling menentukan keberhasilan seluruh sistem bukan menulis kode, melainkan merancang arsitektur spreadsheet dengan benar sejak awal. Banyak sistem dashboard yang gagal berfungsi optimal bukan karena skripnya salah, melainkan karena struktur datanya tidak konsisten dan tidak terpisah dengan jelas antara lapisan data, lapisan input, dan lapisan visualisasi. Investasi waktu ekstra di tahap perancangan ini akan menghemat berkali-kali lipat waktu di tahap pengembangan dan pemeliharaan berikutnya.

Sistem yang akan dibangun dalam tutorial ini menggunakan empat sheet dengan fungsi yang benar-benar terpisah. Pemisahan fungsi ini bukan sekadar preferensi estetika, melainkan prinsip arsitektur data yang memastikan setiap lapisan bisa diperbarui, diperbaiki, atau diperluas tanpa merusak lapisan lainnya. Radifan Aldiansyah, seorang pengembang yang mendokumentasikan sistem serupa di Medium, menegaskan bahwa pemisahan antara sheet data, form input, dan dashboard adalah kunci agar sistem terasa seperti aplikasi manajemen proyek sungguhan, bukan sekadar spreadsheet [4].

Sheet “Data Tugas”: Basis Data Utama Seluruh Sistem

Sheet pertama bernama “Data Tugas” adalah tempat semua rekaman tugas disimpan secara permanen dan berurutan. Sheet ini tidak boleh diedit secara manual oleh anggota tim karena seluruh entri data akan diproses melalui skrip Apps Script agar format, konsistensi, dan ID unik setiap tugas terjaga dengan baik. Struktur kolom yang perlu disiapkan adalah sebagai berikut, dengan setiap kolom diberi nama header yang tepat di baris pertama:

Kolom A digunakan untuk ID Tugas yang diisi otomatis oleh skrip dengan format “TASK-0001”, “TASK-0002”, dan seterusnya. Kolom B untuk Nama Proyek, Kolom C untuk Nama Tugas, Kolom D untuk Penanggung Jawab, Kolom E untuk Status dengan nilai yang dibatasi pada pilihan: “Belum Dimulai”, “Sedang Berjalan”, “Selesai”, atau “Terlambat”. Kolom F untuk Prioritas (Rendah, Sedang, Tinggi), Kolom G untuk Tanggal Mulai, Kolom H untuk Tenggat Waktu, Kolom I untuk Persentase Penyelesaian (nilai 0 hingga 100), Kolom J untuk Catatan, dan Kolom K untuk Timestamp terakhir data diperbarui yang juga diisi otomatis oleh skrip.

Konsistensi nama dan posisi kolom ini sangat penting karena seluruh fungsi Apps Script yang akan ditulis nanti merujuk ke kolom-kolom ini berdasarkan indeks numeriknya. Jika ada kolom yang bergeser posisinya di kemudian hari tanpa memperbarui skrip yang sesuai, seluruh sistem bisa menghasilkan data yang salah tanpa pesan kesalahan yang jelas.

Sheet “Form Input”: Antarmuka Input yang Ramah Pengguna

Sheet kedua bernama “Form Input” adalah satu-satunya sheet yang bersentuhan langsung dengan anggota tim dalam keseharian mereka. Desainnya harus sesederhana dan seintuisi mungkin agar tidak ada anggota tim yang kebingungan saat memasukkan data tugas baru. Untuk kolom Status, Prioritas, dan Nama Proyek, tambahkan validasi data berupa dropdown list melalui menu Data → Data Validation agar tidak ada nilai yang tidak konsisten masuk ke dalam sistem [5]

Tambahkan sebuah tombol berlabel “Simpan & Perbarui Dashboard” di bagian atas sheet ini dengan cara pergi ke menu Insert → Drawing, buat kotak dengan teks, kemudian hubungkan ke fungsi submitTaskForm() yang akan ditulis di bagian selanjutnya. Dengan keberadaan tombol ini, pengalaman anggota tim terasa seperti menggunakan aplikasi sungguhan karena mereka tinggal mengisi form dan menekan satu tombol, tanpa perlu memahami struktur spreadsheet di baliknya [4].

Sheet ketiga adalah “Dashboard” yang seluruh isinya dihasilkan dan diperbarui otomatis oleh skrip, dan sheet keempat adalah “Ringkasan Per Proyek” yang menampilkan breakdown progres untuk setiap proyek secara terpisah. Kedua sheet ini tidak perlu diisi secara manual sama sekali, sehingga bisa dikunci agar tidak bisa diedit oleh siapapun selain skrip itu sendiri.

Mulai Menulis Kode: Fungsi submitTaskForm() untuk Otomatisasi Input Data

Developer Indonesia menulis kode JavaScript di editor Google Apps Script untuk otomatisasi Google Sheets
Google Apps Script menggunakan bahasa JavaScript yang familiar, sehingga bisa dipelajari bahkan tanpa latar belakang programming profesional

Dengan struktur sheet yang sudah siap, saatnya membuka editor Google Apps Script dan mulai menulis kode. Untuk membukanya, klik menu Extensions → Apps Script dari dalam Google Sheets yang sudah disiapkan [6]. Sebuah jendela baru akan muncul dengan editor kode berbasis JavaScript yang bersih dan siap digunakan. Hapus semua kode default yang ada, kemudian mulai menulis dari awal.

Fungsi pertama yang perlu dibuat adalah submitTaskForm(), yaitu fungsi yang dipanggil saat pengguna menekan tombol di sheet “Form Input”. Fungsi ini bertugas membaca semua nilai dari sel form, memvalidasi isian wajib, menghasilkan ID tugas secara otomatis, menambahkan baris baru ke sheet “Data Tugas”, membersihkan form setelah submit, dan memanggil fungsi pembaruan dashboard secara langsung. Berikut kode lengkapnya:

javascript
function submitTaskForm() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const formSheet = ss.getSheetByName("Form Input");
  const dataSheet = ss.getSheetByName("Data Tugas");

  // Ambil nilai dari setiap sel form input
  const namaTugas    = formSheet.getRange("B3").getValue();
  const namaProyek   = formSheet.getRange("B4").getValue();
  const ditugaskanKe = formSheet.getRange("B5").getValue();
  const status       = formSheet.getRange("B6").getValue();
  const prioritas    = formSheet.getRange("B7").getValue();
  const tanggalMulai = formSheet.getRange("B8").getValue();
  const tenggat      = formSheet.getRange("B9").getValue();
  const persen       = formSheet.getRange("B10").getValue() || 0;
  const catatan      = formSheet.getRange("B11").getValue();

  // Validasi: kolom wajib tidak boleh kosong
  if (!namaTugas || !namaProyek || !ditugaskanKe) {
    SpreadsheetApp.getUi().alert(
      "⚠️ Gagal! Harap isi kolom Nama Tugas, Nama Proyek, dan Penanggung Jawab."
    );
    return;
  }

  // Generate ID Tugas otomatis berdasarkan jumlah baris saat ini
  const lastRow = dataSheet.getLastRow();
  const nomorUrut = String(lastRow).padStart(4, "0");
  const idTugas = "TASK-" + nomorUrut;
  const timestamp = new Date();

  // Tambahkan baris baru ke sheet Data Tugas
  dataSheet.appendRow([
    idTugas,
    namaProyek,
    namaTugas,
    ditugaskanKe,
    status || "Belum Dimulai",
    prioritas || "Sedang",
    tanggalMulai,
    tenggat,
    persen,
    catatan,
    timestamp
  ]);

  // Bersihkan semua sel form input setelah submit berhasil
  const selForm = ["B3","B4","B5","B6","B7","B8","B9","B10","B11"];
  selForm.forEach(function(sel) {
    formSheet.getRange(sel).clearContent();
  });

  // Langsung perbarui dashboard setelah data masuk
  updateDashboard();

  SpreadsheetApp.getUi().alert("✅ Tugas " + idTugas + " berhasil disimpan!");
}

Perhatikan bahwa di baris terakhir sebelum konfirmasi, terdapat pemanggilan fungsi updateDashboard(). Ini berarti setiap kali ada tugas baru yang ditambahkan melalui form, dashboard akan langsung diperbarui secara otomatis dalam satu alur kerja yang mulus tanpa perlu tindakan terpisah dari pengguna.

Fungsi updateDashboard(): Cara Kerja Pembaruan Data Secara Real-Time

Fungsi updateDashboard() adalah inti dari seluruh sistem, yaitu otak yang membaca ribuan baris data, menghitung semua metrik penting, mendeteksi keterlambatan, dan menuliskan hasilnya ke sheet Dashboard dalam hitungan detik. Kemampuan Google Apps Script untuk memproses seluruh rentang data sekaligus menggunakan metode getDataRange().getValues() menjadikannya jauh lebih efisien dibandingkan membaca sel satu per satu [5]. Dengan pendekatan ini, bahkan spreadsheet dengan ribuan baris tugas pun bisa diproses dalam waktu yang sangat singkat.

Tambahkan fungsi berikut tepat di bawah fungsi submitTaskForm() dalam editor yang sama:

javascript
function updateDashboard() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet  = ss.getSheetByName("Data Tugas");
  const dashSheet  = ss.getSheetByName("Dashboard");

  // Baca semua data sekaligus untuk efisiensi maksimal
  const semuaData = dataSheet.getDataRange().getValues();
  const hari_ini  = new Date();
  hari_ini.setHours(0, 0, 0, 0);

  let totalTugas = 0, jumlahSelesai = 0, jumlahBerjalan = 0;
  let jumlahTerlambat = 0, totalPersen = 0;

  // Loop mulai dari baris ke-2 untuk melewati baris header
  for (let i = 1; i < semuaData.length; i++) {
    const baris = semuaData[i];
    if (!baris[0]) continue; // Lewati baris yang kosong

    totalTugas++;
    const statusTugas    = baris[4];
    const tenggatWaktu   = new Date(baris[7]);
    const persenSelesai  = parseFloat(baris[8]) || 0;

    totalPersen += persenSelesai;

    if (statusTugas === "Selesai") {
      jumlahSelesai++;
    } else if (statusTugas === "Sedang Berjalan") {
      jumlahBerjalan++;
    }

    // Deteksi keterlambatan: belum selesai tapi sudah melewati tenggat
    if (statusTugas !== "Selesai" && tenggatWaktu < hari_ini) {
      jumlahTerlambat++;
      // Perbarui status dan beri warna merah sebagai sinyal visual
      dataSheet.getRange(i + 1, 5)
               .setValue("Terlambat")
               .setBackground("#FF6B6B")
               .setFontColor("#FFFFFF");
    }
  }

  const rataRataPersen = totalTugas > 0
    ? Math.round(totalPersen / totalTugas)
    : 0;

  // Tulis semua metrik ke sel-sel di sheet Dashboard
  dashSheet.getRange("B4").setValue(totalTugas);
  dashSheet.getRange("D4").setValue(jumlahSelesai);
  dashSheet.getRange("F4").setValue(jumlahBerjalan);
  dashSheet.getRange("H4").setValue(jumlahTerlambat);
  dashSheet.getRange("B6").setValue(rataRataPersen + "%");
  dashSheet.getRange("D6").setValue("Diperbarui: " +
    Utilities.formatDate(new Date(), "Asia/Jakarta", "dd/MM/yyyy HH:mm"));

  // Paksa semua perubahan langsung ditulis ke spreadsheet
  SpreadsheetApp.flush();
}

Satu detail yang sering diabaikan tapi sangat penting adalah baris SpreadsheetApp.flush() di akhir fungsi. Perintah ini memaksa semua perubahan yang sudah diproses untuk langsung ditulis ke spreadsheet sebelum skrip selesai berjalan, memastikan tidak ada data yang hilang akibat proses penulisan yang belum tuntas [6]. Tanpa baris ini, ada kemungkinan kecil perubahan terakhir tidak tersimpan jika skrip diinterupsi oleh trigger lain yang berjalan bersamaan.

Membangun Tampilan Dashboard Visual dengan Rumus dan Chart Otomatis

Setelah skrip otomatisasi berjalan dengan baik, saatnya membangun tampilan visual di sheet “Dashboard” agar informasi bisa diserap sekilas tanpa harus membaca baris per baris. Dashboard yang efektif harus mampu menjawab tiga pertanyaan kritis dalam waktu kurang dari lima detik, yaitu seberapa jauh progres keseluruhan, siapa yang memiliki beban kerja tertinggi, dan tugas mana yang sedang dalam kondisi kritis. Ketiga pertanyaan ini dijawab melalui kombinasi KPI cards dengan warna yang bermakna, bagan distribusi, dan pewarnaan kondisional yang terotomatisasi.

KPI Cards dengan Rumus COUNTIF dan AVERAGEIF sebagai Lapisan Cadangan

Meskipun skrip Apps Script sudah menghitung dan menuliskan semua metrik ke sel dashboard, menambahkan rumus Google Sheets langsung di sel-sel KPI card memberikan lapisan keamanan tambahan karena rumus ini selalu sinkron secara otomatis bahkan saat skrip tidak dijalankan. Untuk menghitung jumlah tugas yang jatuh tempo dalam tujuh hari ke depan dan belum selesai, gunakan rumus COUNTIFS seperti ini:

Newsletter WhatsApp & Telegram

Dapatkan update artikel via WhatsApp & Telegram

Pilih kanal favorit Anda: WhatsApp untuk notifikasi singkat langsung ke ponsel, Telegram untuk arsip lengkap & DM Bot pilih topik.

=COUNTIFS('Data Tugas'!H:H,">="&TODAY(),'Data Tugas'!H:H,"<="&TODAY()+7,'Data Tugas'!E:E,"<>Selesai")

Untuk menampilkan rata-rata persentase penyelesaian per proyek tertentu, misalnya proyek bernama “Redesain Situs Web”, gunakan rumus AVERAGEIF:

=AVERAGEIF('Data Tugas'!B:B,"Redesain Situs Web",'Data Tugas'!I:I)

Dan untuk menghitung beban kerja per anggota tim, yaitu berapa banyak tugas aktif yang sedang ditangani oleh seseorang, gunakan COUNTIFS dengan dua kriteria sekaligus:

=COUNTIFS('Data Tugas'!D:D,"Nama Anggota",'Data Tugas'!E:E,"Sedang Berjalan")

Rumus-rumus ini bekerja secara dinamis dan akan memperbarui nilainya setiap kali ada perubahan data di sheet “Data Tugas”, memberikan lapisan real-time yang bekerja bahkan di antara jeda trigger otomatis.

Cara Membuat Grafik Otomatis yang Selalu Sinkron dengan Data

Google Sheets memiliki kemampuan pembuatan grafik yang terhubung langsung ke sumber data dan memperbarui dirinya sendiri secara otomatis setiap kali data berubah [4]. Untuk membuat bagan distribusi status tugas yang paling informatif, pertama buat tabel ringkasan kecil di sheet “Dashboard” dengan rumus COUNTIF untuk setiap status, kemudian pilih tabel tersebut dan klik Insert → Chart.

Pilih tipe Donut Chart untuk distribusi status karena bagan berbentuk cincin ini memperlihatkan proporsi dengan cara yang sangat intuitif. Pastikan warna setiap segmen konsisten dengan kode warna yang digunakan di seluruh sistem: hijau untuk “Selesai”, biru untuk “Sedang Berjalan”, abu-abu untuk “Belum Dimulai”, dan merah untuk “Terlambat”. Konsistensi warna ini membantu otak memproses informasi lebih cepat karena tidak perlu membaca legenda setiap kali melihat grafik.

Untuk grafik kedua, buat Column Chart yang menampilkan persentase penyelesaian per proyek. Grafik ini paling berguna saat tim sedang mengelola beberapa proyek paralel sekaligus karena memungkinkan perbandingan visual yang instan antara proyek yang sudah hampir selesai dengan yang masih tertinggal jauh.

Mengatur Trigger Berbasis Waktu agar Dashboard Tidak Pernah Kedaluwarsa

Salah satu keunggulan paling transformatif dari Google Apps Script yang membedakannya dari sekadar spreadsheet biasa adalah kemampuan berjalan secara terjadwal tanpa memerlukan siapapun untuk membuka file tersebut, melalui fitur yang disebut Trigger [3]. Dengan trigger yang dikonfigurasi dengan benar, updateDashboard() akan berjalan otomatis setiap beberapa menit, memastikan tidak ada perubahan status yang luput dan tidak ada keterlambatan yang tidak terdeteksi terlalu lama. Ini adalah perbedaan antara dashboard yang benar-benar live dan dashboard yang harus di-refresh secara manual.

Untuk mengatur trigger berbasis waktu, buka editor Apps Script, kemudian klik ikon jam (Triggers) di panel navigasi kiri, atau akses melalui menu Edit → Current Project’s Triggers. Di halaman pengaturan trigger yang terbuka, klik tombol + Add Trigger di pojok kanan bawah. Konfigurasi trigger untuk fungsi updateDashboard() dengan pengaturan berikut:

Pilih fungsi yang dijalankan: updateDashboard, Pilih deployment: Head, Pilih sumber event: Time-driven, Pilih tipe timer: Minutes timer, Pilih interval: Every 5 minutes. Klik Save dan izinkan akses yang diminta oleh Google.

Dengan konfigurasi ini, dashboard akan selalu menampilkan data yang tidak lebih dari lima menit ketinggalan, bahkan saat tidak ada pengguna yang membuka spreadsheet sama sekali [5]. Untuk tim yang bekerja di zona waktu yang sama dengan zona waktu Indonesia (WIB, WITA, atau WIT), sesuaikan pengaturan ini dengan mempertimbangkan kapan jam kerja tim dimulai dan berakhir agar trigger tidak membuang sumber daya komputasi di luar jam kerja.

Selain trigger berbasis waktu, sangat disarankan untuk juga menambahkan trigger berbasis perubahan menggunakan event type “From spreadsheet” dengan pilihan “On change”. Trigger ini akan memanggil updateDashboard() setiap kali ada perubahan manual di spreadsheet, menjamin bahwa setiap edit langsung tercermin di dashboard dalam hitungan detik, bukan menunggu interval lima menit berikutnya.

Menambahkan Notifikasi Email Otomatis untuk Tugas yang Melewati Tenggat

Kemampuan mengirim email otomatis adalah salah satu fitur yang paling sering menjadi daya tarik utama perangkat lunak manajemen proyek berbayar, dan Google Apps Script menyediakannya secara gratis melalui layanan MailApp yang sudah terintegrasi langsung dalam ekosistem Google Workspace [3]. Notifikasi email harian yang dikirim sebelum jam kerja dimulai memungkinkan manajer proyek untuk segera mengambil tindakan korektif terhadap tugas-tugas bermasalah, bukan baru menyadarinya saat sudah terlambat. Tambahkan fungsi berikut ke dalam proyek Apps Script yang sama:

javascript
function kirimNotifikasiTerlambat() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName("Data Tugas");
  const semuaData = dataSheet.getDataRange().getValues();
  const hari_ini  = new Date();
  hari_ini.setHours(0, 0, 0, 0);

  let barisTabel = "";
  let adaTugasTerlambat = false;

  for (let i = 1; i < semuaData.length; i++) {
    const baris = semuaData[i];
    if (!baris[0]) continue;

    const statusTugas  = baris[4];
    const tenggatWaktu = new Date(baris[7]);

    if (statusTugas !== "Selesai" && tenggatWaktu < hari_ini) {
      adaTugasTerlambat = true;
      const tenggatFormatted = Utilities.formatDate(
        tenggatWaktu, "Asia/Jakarta", "dd/MM/yyyy"
      );
      barisTabel += "<tr style='background:#fff5f5'>" +
        "<td style='padding:8px;border:1px solid #ddd'>" + baris[0] + "</td>" +
        "<td style='padding:8px;border:1px solid #ddd'>" + baris[1] + "</td>" +
        "<td style='padding:8px;border:1px solid #ddd'>" + baris[2] + "</td>" +
        "<td style='padding:8px;border:1px solid #ddd'>" + baris[3] + "</td>" +
        "<td style='padding:8px;border:1px solid #ddd;color:#CC0000'>" + tenggatFormatted + "</td>" +
        "</tr>";
    }
  }

  if (!adaTugasTerlambat) return; // Tidak kirim email jika tidak ada keterlambatan

  const isiEmail = "<h2 style='color:#CC0000'>⚠️ Laporan Tugas Terlambat</h2>" +
    "<p>Berikut daftar tugas yang melewati tenggat waktu dan belum diselesaikan:</p>" +
    "<table style='border-collapse:collapse;width:100%'>" +
    "<tr style='background:#CC0000;color:white'>" +
    "<th style='padding:8px'>ID</th><th style='padding:8px'>Proyek</th>" +
    "<th style='padding:8px'>Tugas</th><th style='padding:8px'>PIC</th>" +
    "<th style='padding:8px'>Tenggat</th></tr>" +
    barisTabel + "</table>" +
    "<p style='color:#666;font-size:12px'>Email ini dikirim otomatis oleh sistem tracking proyek.</p>";

  MailApp.sendEmail({
    to: "[email protected]",
    subject: "⚠️ [Tracking Proyek] Ada " + barisTabel.split("<tr").length + " Tugas Terlambat",
    htmlBody: isiEmail
  });
}

Setelah fungsi ini tersimpan, tambahkan trigger baru khusus untuk fungsi kirimNotifikasiTerlambat() dengan konfigurasi: Time-driven, Day timer, antara pukul 7 pagi hingga 8 pagi. Dengan pengaturan ini, setiap hari kerja manajer proyek sudah mendapat laporan di kotak masuk Gmail sebelum rapat pagi dimulai, memungkinkan pengambilan keputusan yang lebih cepat dan tepat waktu [6].

Tips Keamanan Data dan Kolaborasi Tim yang Efektif dalam Satu Spreadsheet

Sistem yang sudah dibangun ini akan diakses oleh banyak orang dengan peran yang berbeda-beda, dan tanpa pengaturan keamanan yang tepat, risiko data yang tidak sengaja terhapus atau rumus yang rusak adalah nyata dan bisa mengganggu seluruh sistem. Google Sheets menyediakan fitur Protect Sheets and Ranges yang memungkinkan penguncian sel atau sheet tertentu sehingga hanya orang dengan izin khusus yang bisa mengeditnya [7]. Implementasi fitur ini adalah langkah terakhir yang mengubah sistem dari “spreadsheet canggih” menjadi “sistem manajemen proyek yang andal”.

Untuk mengaktifkan proteksi pada sheet “Data Tugas”, klik kanan tab sheetnya, pilih Protect Sheet, kemudian di panel yang muncul klik Set Permissions. Pilih opsi “Restrict who can edit this range” dan tambahkan hanya alamat email manajer proyek atau administrator sistem. Seluruh anggota tim biasa tidak perlu mendapat akses edit ke sheet ini karena mereka berinteraksi melalui sheet “Form Input” saja. Dengan pembagian akses ini, tidak ada data yang bisa rusak akibat edit tidak sengaja, sekaligus alur kerja tim tetap berjalan lancar [7].

Untuk tim yang tersebar di berbagai zona waktu, ada satu konfigurasi kritis yang tidak boleh dilewatkan: pastikan zona waktu spreadsheet sudah diatur ke GMT+7:00 Jakarta melalui menu File → Settings → Time zone. Pengaturan ini mempengaruhi cara Google Apps Script menginterpretasikan objek new Date() dan fungsi Utilities.formatDate(), dan jika dibiarkan pada zona waktu default yang mungkin UTC atau zona waktu server Google, semua perhitungan tenggat waktu dan pengiriman email terjadwal akan meleset beberapa jam dari yang seharusnya [6]. Sebuah detail kecil yang konsekuensinya bisa sangat besar.

Sebagai lapisan perlindungan terakhir, sangat disarankan untuk menambahkan fungsi pencadangan otomatis yang menyalin seluruh spreadsheet ke folder tertentu di Google Drive setiap minggu. Tambahkan baris kode berikut sebagai fungsi terpisah dan atur triggernya untuk berjalan setiap Jumat malam:

javascript
function cadanganMingguan() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const namaFile = "Cadangan Tracking Proyek " +
    Utilities.formatDate(new Date(), "Asia/Jakarta", "dd-MM-yyyy");
  ss.copy(namaFile);
}

Fungsi sederhana ini secara otomatis membuat salinan spreadsheet lengkap beserta semua datanya setiap minggu, memberikan titik pemulihan yang selalu tersedia jika terjadi hal yang tidak terduga.

Sistem dashboard tracking proyek yang sudah dibangun melalui tutorial ini bukan sekadar spreadsheet yang dihias, melainkan sebuah mesin manajemen proyek yang berjalan sendiri, mendeteksi masalah secara proaktif, dan mengomunikasikannya kepada orang yang tepat pada waktu yang tepat. Dengan Google Apps Script sebagai otaknya dan Google Sheets sebagai antarmukanya, tim dari skala kecil hingga menengah kini punya akses ke kemampuan yang setara dengan perangkat lunak berbayar kelas enterprise, tanpa harus mengorbankan serupiah pun dari anggaran. Ekosistem Google Workspace yang dipercaya oleh lebih dari 3 miliar pengguna aktif per bulan di seluruh dunia [2] menjadi fondasi infrastruktur yang kokoh untuk sistem ini, dengan jaminan ketersediaan dan keamanan yang sudah teruji. Sudah mencoba membangunnya? Atau ada bagian kode yang belum berhasil berjalan sesuai ekspektasi? Bagikan pengalamanmu di kolom komentar di bawah, karena diskusi dari pembaca lain seringkali menghadirkan solusi dan variasi yang tidak terpikirkan sebelumnya.

References


  1. SQ Magazine — Google Sheets Statistics 2025: Mobile vs Desktop, Education Use & Advanced Features

  2. About Chromebooks — Google Workspace Integration Usage Statistics (2025)

  3. Google Workspace — Apps Script: The Only Low-Code Platform for Google Workspace

  4. Radifan Aldiansyah via Medium — Task & Project Progress Tracker in Google Sheets with Apps Script (2025)

  5. Oluwatosin Obalana via Medium — Automating Task Management with Google Sheets and Apps Script

  6. Google for Developers — Record Time & Activities in Google Calendar & Google Sheets

  7. DashboardDr — Google Sheets Project Tracker Template: Free Templates & Guide

Pertanyaan yang Sering Diajukan

# Dashboard Tracking # Tutorial

Siap menerapkan ini untuk bisnis kamu?

Mari Diskusi →
Bagikan —

Leave a Reply

Your email address will not be published.

8 + 3 =