top of page

Cara Guna Google Apps Script untuk Automasikan Google Sheets - dan Kelemahannya

TL;DR: Google Apps Script (GAS) adalah alat percuma dalam Google Workspace yang membolehkan anda tulis kod JavaScript-style untuk automasikan Google Sheets - sambung dua spreadsheet, hantar email automatik, buat trigger masa, dan sambung ke API luar. Percuma, tidak perlukan server. Tapi ada had yang serius: 6 minit execution limit, tiada real-time processing, dan tidak sesuai untuk data besar atau multi-user apps.

Apa Itu Google Apps Script?

Google Apps Script (GAS) adalah persekitaran pengaturcaraan berasaskan JavaScript yang dibina terus dalam ekosistem Google. Anda boleh akses terus dari Google Sheets, Google Docs, atau Gmail - tanpa perlu pasang apa-apa.

Ia berjalan di server Google (cloud), bukan di komputer anda. Ini bermakna:

  • Percuma untuk pengguna Google Workspace dan Gmail biasa

  • Tiada setup - langsung boleh mula kod

  • Berjalan automatik mengikut schedule atau event yang anda tetapkan

GAS sangat popular di kalangan pengurus bisnes kecil, guru, dan penganalisis data yang mahu automasikan kerja berulang dalam spreadsheet tanpa perlu mengupah developer.

Cara Akses Google Apps Script

Dari Google Sheets:

  1. Buka spreadsheet anda di sheets.google.com

  1. Klik menu Extensions di bar atas

  1. Pilih Apps Script

  1. Editor GAS akan buka dalam tab baru

Dari script.google.com:

  • Terus pergi ke script.google.com untuk buat projek baru yang tidak terikat kepada spreadsheet tertentu

Editor Google Apps Script menunjukkan kod JavaScript dengan syntax highlighting - antara muka IDE profesional

Editor GAS kelihatan seperti IDE biasa: panel kiri untuk fail, panel utama untuk kod, butang Run dan Debug di atas.

Guna Kes Paling Popular: Sambung Dua Google Sheets

Ini adalah keperluan paling biasa - salin data dari satu spreadsheet ke spreadsheet lain secara automatik.

Contoh Kod: Salin Data dari Sheet A ke Sheet B

function sambungDuaSheets() {
  // ID spreadsheet sumber (ambil dari URL)
  var sourceId = 'MASUKKAN_ID_SPREADSHEET_SUMBER';
  var targetId = 'MASUKKAN_ID_SPREADSHEET_TARGET';
  
  // Buka kedua-dua spreadsheet
  var sourceSheet = SpreadsheetApp.openById(sourceId).getSheetByName('Data');
  var targetSheet = SpreadsheetApp.openById(targetId).getSheetByName('Ringkasan');
  
  // Ambil semua data dari sumber
  var data = sourceSheet.getDataRange().getValues();
  
  // Kosongkan sheet target dulu
  targetSheet.clearContents();
  
  // Tulis data ke sheet target
  targetSheet.getRange(1, 1, data.length, data[0].length).setValues(data);
  
  Logger.log('Selesai! ' + data.length + ' baris disalin.');
}

Cara ambil ID Spreadsheet:

Dari URL: https://docs.google.com/spreadsheets/d/**ID_DI_SINI**/edit

  • Salin bahagian panjang antara /d/ dan /edit

Langkah Jalankan Kod

  1. Tampal kod di atas ke editor

  1. Ganti MASUKKAN_ID_... dengan ID spreadsheet sebenar

  1. Klik butang Run (atau tekan Ctrl+Enter)

  1. Pertama kali: Google akan minta kebenaran akses - klik Review Permissions dan benarkan

  1. Semak log di bawah: View > Logs untuk confirm berjaya

Jenis-Jenis Trigger: Jadual Automatik

Trigger adalah ciri paling berguna dalam GAS - ia jalankan fungsi anda secara automatik tanpa perlu klik Run setiap kali.

Tiga jenis trigger Google Apps Script: Time-based, Spreadsheet, dan Form trigger dengan ikon heksagon siber

Cara Set Trigger

  1. Dalam editor GAS, klik ikon jam (Triggers) di panel kiri

  1. Klik Add Trigger di bawah kanan

  1. Pilih tetapan:

Tetapan

Pilihan

Function

Pilih fungsi yang mahu dijalankan

Event Source

Time-driven / Spreadsheet

Type of time trigger

Minit, jam, harian, mingguan, bulanan

Time of day

Tetapkan julat masa

Jenis Trigger yang Tersedia

Time-based (Jadual Masa):

  • Setiap minit / 5 minit / 10 minit / 15 minit / 30 minit

  • Setiap jam

  • Setiap hari (pilih selang waktu)

  • Setiap minggu (pilih hari)

  • Setiap bulan

Spreadsheet Event:

  • onOpen - jalankan bila spreadsheet dibuka

  • onEdit - jalankan bila ada sel yang diedit

  • onChange - jalankan bila struktur spreadsheet berubah

  • onFormSubmit - jalankan bila Google Form disubmit

Contoh Lebih Berguna: Hantar Email Automatik

Ini contoh yang sangat popular untuk notifikasi kehadiran, laporan harian, atau alert stok.

Kod: Hantar Email Ringkasan Harian

function hantarEmailRingkasan() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Jualan');
  var data = sheet.getDataRange().getValues();
  
  // Kira jumlah jualan hari ini
  var today = new Date().toLocaleDateString('ms-MY');
  var totalJualan = 0;
  var bilanganTransaksi = 0;
  
  for (var i = 1; i < data.length; i++) { // mulai row 2 (skip header)
    if (data[i][0] == today) { // kolum A = tarikh
      totalJualan += data[i][3]; // kolum D = jumlah
      bilanganTransaksi++;
    }
  }
  
  // Hantar email
  var emailPenerima = 'bos@syarikat.com';
  var subjek = 'Laporan Jualan ' + today;
  var mesej = 'Laporan Harian:\n\n' +
               'Bilangan Transaksi: ' + bilanganTransaksi + '\n' +
               'Jumlah Jualan: RM ' + totalJualan.toFixed(2) + '\n\n' +
               'Dijana automatik oleh Google Apps Script.';
  
  GmailApp.sendEmail(emailPenerima, subjek, mesej);
  Logger.log('Email dihantar ke ' + emailPenerima);
}

Set trigger setiap hari pukul 6PM - awak dapat email ringkasan jualan setiap malam tanpa buat apa-apa.

Sambung ke Sistem Luar (API Integration)

GAS boleh buat HTTP request ke API luaran - bermakna spreadsheet anda boleh bercakap dengan hampir mana-mana sistem.

Carta aliran data: Google Sheets ke Apps Script ke pelbagai output - Gmail, Slack, WhatsApp dan External API

Contoh: Hantar Notifikasi ke Telegram

function hantarTelegram(mesej) {
  var botToken = 'TOKEN_BOT_TELEGRAM_ANDA';
  var chatId = 'CHAT_ID_ANDA';
  
  var url = 'https://api.telegram.org/bot' + botToken + '/sendMessage';
  
  var payload = {
    'chat_id': chatId,
    'text': mesej,
    'parse_mode': 'HTML'
  };
  
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };
  
  UrlFetchApp.fetch(url, options);
}

// Fungsi utama - panggil dari trigger
function semakStokDanNotifikasi() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Inventori');
  var data = sheet.getDataRange().getValues();
  
  for (var i = 1; i < data.length; i++) {
    var namaItem = data[i][0];
    var stokSedia = data[i][2];
    var hadMinimum = data[i][3];
    
    if (stokSedia < hadMinimum) {
      hantarTelegram('⚠️ STOK RENDAH: ' + namaItem + ' - Baki: ' + stokSedia);
    }
  }
}

Dengan cara ini, spreadsheet Google Sheets anda boleh jadi sistem notifikasi stok automatik.

Kelemahan Google Apps Script: Perkara Yang Perlu Awak Tahu

GAS sangat berguna - tapi ia ada had yang serius. Ramai orang yang bina sistem penting di atas GAS kemudian menyesal bila ia gagal di saat kritikal.

Infografik lima kelemahan Google Apps Script dengan kad amaran: Execution Limit, Email Quota, Tiada Real-time, Debugging Susah, Tidak Scalable

Had dan Kuota Google Apps Script (Akaun Biasa)

Had

Had Harian

Had Minit

Masa Pelaksanaan Skrip

-

6 minit per run

Emel Dihantar

100 emel/hari

-

URL Fetch (API calls)

20,000 panggilan/hari

-

Trigger Dijalankan

20 trigger/hari

-

SpreadsheetApp Read

Tidak terhad (tapi perlahan)

-

Saiz Spreadsheet

Had memori skrip ~50MB

-

Kelemahan 1: Had Masa 6 Minit

Ini had paling kritikal. Jika fungsi anda ambil masa lebih dari 6 minit, Google akan hentikannya secara paksa tanpa habiskan tugasan. Data mungkin tersimpan separuh jalan - kondisi yang bahaya untuk rekod penting.

Contoh kes masalah: Proses 10,000 baris data dari spreadsheet. Kalau ambil 8 minit - skrip dihentikan di baris ke-7,500. Tiada error message yang jelas kepada pengguna.

Workaround: Pecahkan kerja kepada "batch" yang kecil, simpan progress di PropertiesService, dan jadualkan trigger untuk teruskan dari mana berhenti. Tapi ini sangat kompleks untuk dibina dan diselenggara.

Kelemahan 2: Tiada Pemprosesan Real-Time

GAS tidak dapat bertindak balas serta-merta kepada perubahan. onEdit trigger ada kelewatan beberapa saat. Untuk sistem yang perlukan respons dalam milisaat (contoh: POS system, booking system), GAS tidak sesuai langsung.

Kelemahan 3: Tidak Scalable untuk Banyak Pengguna

Jika 20 orang edit spreadsheet yang sama pada masa yang sama, trigger boleh berlanggar dan data boleh overwrite antara satu sama lain. GAS tidak ada concurrency control yang proper.

Kelemahan 4: Debugging yang Menyusahkan

  • Log mesti dilihat di View > Logs - tiada console live

  • Error message kadang sangat umum ("Exception: Service invoked too many times")

  • Sukar nak trace bila masalah berlaku dalam trigger yang berjalan semasa awak tidur

Kelemahan 5: Bergantung Sepenuhnya kepada Google

Jika Google tukar polisi, had kuota, atau hentikan ciri tertentu - sistem anda terjejas. Ini sudah berlaku beberapa kali dalam sejarah GAS (contoh: penghapusan beberapa API lama).

Bila TIDAK Guna Google Apps Script

  • Data lebih dari 50,000 baris yang diproses kerap

  • Perlukan respons real-time (bawah 1 saat)

  • Lebih dari 5 pengguna edit serentak

  • Logik bisnes yang kompleks dengan banyak kebergantungan

  • Perlukan rekod audit yang ketat (siapa buat apa pada bila)

Alternatif Bila GAS Sudah Tidak Mencukupi

Keperluan

Penyelesaian Yang Lebih Baik

Automation tanpa kod

Make.com, n8n, Zapier

Database bisnes yang proper

Airtable, Notion Database

Sistem FnB / rekod kos

Platform khusus seperti ProfitPulse

API custom + webhook real-time

Node.js + Supabase

Automasikan lebih rumit

Python + Google Sheets API v4

FAQ: Google Apps Script Malaysia 2026

Adakah Google Apps Script benar-benar percuma?

Ya, percuma untuk pengguna Google Workspace (termasuk akaun Gmail biasa) sehingga had kuota. Jika perlukan had lebih tinggi, Google menawarkan tier berbayar melalui Google Workspace Business.

Boleh ke sambung Google Sheets dengan WhatsApp melalui GAS?

Boleh, secara tidak langsung. GAS boleh hantar HTTP request ke WhatsApp Business API atau Twilio. Tapi WhatsApp Business API ada kos sendiri (bukan percuma). GAS hanya sebagai "penghantar" - kos WhatsApp adalah berasingan.

Boleh ke GAS digunakan tanpa pengetahuan coding?

Tahap asas boleh dipelajari dalam masa beberapa hari dengan sumber online seperti YouTube. Tapi untuk fungsi kompleks dan debugging, pengalaman JavaScript sangat membantu. Ramai orang Malaysia guna GAS dengan bantuan ChatGPT untuk hasilkan kod asas.

Berapa lama trigger GAS boleh berjalan sebelum dikira expired?

Trigger berjalan sehingga 6 minit. Selepas 6 minit, ia dihentikan. Untuk pemula, ini had yang biasanya tidak menjadi masalah. Tapi untuk proses data besar, awak perlu rancang dengan batching strategy.

GAS selamat ke untuk simpan data sensitif seperti data pelanggan?

Data dalam Google Sheets dilindungi oleh sistem keselamatan Google. Tapi GAS sendiri - terutama bila ia buat API calls ke sistem luar - boleh dedahkan data jika kod tidak ditulis dengan berhati-hati. Elak hardcode API keys dalam kod; guna PropertiesService untuk simpan credentials.

Apa perbezaan GAS dengan Microsoft Power Automate?

GAS adalah eksklusif untuk Google Workspace. Power Automate adalah eksklusif untuk Microsoft 365. Fungsi asasnya serupa tapi Power Automate ada antara muka visual (no-code) yang lebih user-friendly untuk pengguna bukan teknikal. GAS perlukan menulis kod.

Artikel ini berguna untuk sesiapa yang mahu automasikan proses manual dalam Google Sheets tanpa perlu mengupah developer - tapi perlu faham had sebelum bergantung sepenuhnya pada GAS untuk sistem bisnes kritikal.

 
 
 

Comments


bottom of page