Di dunia kerja, data tidak datang sebagai matriks rapi melainkan sebagai workbook Excel: rekap bulanan dari tim keuangan, daftar stok dari gudang, hasil survei dari pemasaran. MATLAB dapat membaca dan menulis berkas .xls/.xlsx secara langsung — memilih sheet tertentu, mengambil rentang sel, lalu menuliskan hasil analisis ke sheet baru. Chapter ini membahas:

  • Peta fungsi baca-tulis Excel: readtable, readmatrix, readcell, writetable, writematrix
  • Memilih sheet dan rentang sel dengan name-value Sheet dan Range
  • Fungsi warisan xlsread/xlswrite yang kini berstatus deprecated
  • Alur kerja lengkap: baca sheet → analisis → tulis sheet hasil

Peta Fungsi Baca-Tulis Excel #

FungsiSejakHasil / masukanKegunaan
readtableR2013btable bernama kolombaca sheet dengan header dan tipe campuran
readmatrixR2019amatriks numerikbaca sheet berisi angka saja
readcellR2019acell arraybaca sel apa adanya — angka, teks, kosong
writetableR2013bmenerima tabletulis tabel + header ke sheet
writematrixR2019amenerima matrikstulis angka ke sheet
xlsread/xlswritelamamatrikswarisan; not recommended

Mekanisme umumnya seragam: ekstensi berkas menentukan format, argumen name-value Sheet memilih lembar kerja, dan Range memilih wilayah sel. Kombinasi readtable untuk masukan dan writetable untuk keluaran adalah pasangan yang disarankan dokumentasi MATLAB.

Membaca Sheet Tertentu dengan readtable #

Masalah nyatanya: workbook nyata punya banyak sheet dan sering hanya satu yang berisi data yang kita butuhkan. Mekanismenya: readtable(namaBerkas, Sheet="Penjualan") membuka sheet bernama Penjualan, mendeteksi header di baris pertamanya, lalu membangun table dengan satu variabel per kolom:

matlab
T = readtable("data_penjualan.xlsx", Sheet="Penjualan");
totalPendapatan = sum(T.unit .* T.harga);
fprintf('total pendapatan: Rp%d\n', totalPendapatan);

Output yang Dihasilkan (tampilan T di Command Window MATLAB):

text
T =
  6×3 table
    bulan    unit    harga
    _____    ____    ______
      1       120     15000
      2       135     15000
      3       98      16000
      4       150     16000
      5       142     17000
      6       128     17000

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (readtable(..., Sheet="Penjualan")): argumen Sheet menerima nama sheet sebagai teks atau nomor urutnya (misalnya Sheet=2). Tanpa argumen ini, readtable membaca sheet pertama.
  2. Baris 2 (T.unit .* T.harga): variabel tabel diakses dengan dot notation — T.unit mengeluarkan vektor kolom 6×1 siap dihitung, tanpa perlu tahu posisi kolomnya.
  3. Baris 3 (fprintf): angka total pendapatan (Rp12.383.000) dicetak; bagian tampilan T hanya konteks MATLAB.

Rentang Sel dengan Range #

Data sering tidak mulai di sel A1 — judul laporan menempati baris atas. Mekanismenya: name-value Range menerima notasi A1 dalam tiga bentuk: sel awal "A5" (pembacaan berhenti otomatis di baris kosong pertama), rentang persegi "A5:C11", atau named range Excel "dataKu":

matlab
T = readtable("data_penjualan.xlsx", Sheet="Penjualan", Range="A4:C10");
A = readmatrix("data_penjualan.xlsx", Sheet="Penjualan", Range="B4:C10");

Output yang Dihasilkan: tidak ada — kedua panggilan hanya mengisi variabel T (6 baris × 3 kolom dari rentang A4:C10) dan A (matriks 6×2 dari kolom B-C saja, tanpa nama kolom).

Penjelasan sintaksisnya: readmatrix mengembalikan matriks numerik murni sehingga cocok untuk blok angka tanpa header; bila rentang itu memuat sel campuran (teks di tengah angka), readcell mengambil seluruhnya apa adanya sebagai cell array dan sel kosong menjadi missing di MATLAB.

Hasil analisis perlu kembali ke Excel agar tim lain bisa membukanya tanpa MATLAB. Mekanismenya: writetable(T, namaBerkas, Sheet=..., Range=...) menulis tabel lengkap baris header ke sheet bernama sama — sheet baru dibuat bila belum ada:

matlab
ringkasan = table("metode", ["total"; "rata-rata"], ...
                  "nilai", [12383000; 128.83], ...
                  "VariableNames", {"metode", "nilai"});
writetable(ringkasan, "hasil_analisis.xlsx", Sheet="Ringkasan");

Penjelasan sintaksisnya: konstruktor table(...) membangun tabel 2×2 dengan nama kolom lewat "VariableNames"; writetable membuat sheet baru bernama Ringkasan di hasil_analisis.xlsx dan menempatkan tabelnya mulai sel A1. Untuk angka murni, writematrix(A, "hasil.xlsx", Sheet="Data") menulis matriks tanpa header; name-value Range="A5" menggeser posisi tulis ke sel tertentu.

Warisan: xlsread dan xlswrite #

Pasangan xlsread/xlswrite adalah cara klasik (sebelum R2013b) untuk berkomunikasi dengan Excel: [num, txt, raw] = xlsread('data.xlsx', 'Sheet1', 'A1:C7') memisahkan angka, teks, dan isi mentah ke tiga keluaran. Dokumentasi MATLAB kini menandai keduanya sebagai not recommended karena readtable/readmatrix lebih cepat, lebih aman, dan lebih kaya opsi. Kode lama yang kita temui tetap sah dibaca — hanya saja proyek baru sebaiknya memakai fungsi modern.

Alur Kerja Lengkap: Excel ke Analisis ke Hasil #

Alur kerja Excel tidak berdiri dari satu panggilan, melainkan rangkaian: baca sheet data, hitung ringkasan, tulis sheet hasil. Diagram berikut memetakan alurnya:

Berkas contoh.m menguji alur yang sama dalam bentuk analogi CSV — menulis “sheet” data ber-header, membacanya kembali lewat guard modern/klasik, menganalisis, lalu menulis “sheet” ringkasan:

matlab
if exist('readmatrix') ~= 0
  A = readmatrix('data_penjualan.csv');     % MATLAB: juga berlaku untuk .xlsx
  fprintf('dibaca dengan readmatrix\n');
else
  A = csvread('data_penjualan.csv', 1, 0);  % padanan: lewati baris header
  fprintf('dibaca dengan csvread\n');
end
fprintf('ukuran data: %d baris x %d kolom\n', size(A, 1), size(A, 2));

pendapatan = sum(A(:, 2) .* A(:, 3));
fprintf('total pendapatan: Rp%d\n', pendapatan);
fprintf('unit tertinggi : %d (bulan %d)\n', max(A(:, 2)), A(A(:, 2) == max(A(:, 2)), 1));

Output yang Dihasilkan (jalur klasik yang aktif saat diuji di Octave — nilai identik di jalur MATLAB karena datanya sama):

text
dibaca dengan csvread
ukuran data: 6 baris x 3 kolom
total pendapatan: Rp12383000
unit tertinggi : 150 (bulan 4)

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (exist('readmatrix') ~= 0): guard memilih readmatrix (yang berlaku juga untuk .xlsx) di MATLAB dan csvread dengan offset header di Octave.
  2. Baris 9 (A(A(:, 2) == max(A(:, 2)), 1)): logical indexing menemukan baris unit maksimum lalu mengambil kolom bulannya — pola pencarian yang kita kuasai dari section Pengolahan Data.
  3. Baris 11 (sum(A(:, 2) .* A(:, 3))): total pendapatan dihitung dari kolom unit × harga — nilai yang sama dengan jalur readtable + T.unit .* T.harga di MATLAB.

Ringkasan #

Excel dibaca dengan readtable (kolom bernama, tipe campuran), readmatrix (angka murni), atau readcell (sel apa adanya); ditulis kembali dengan writetable/writematrix. Argumen Sheet memilih lembar, Range memilih wilayah sel dalam notasi A1. Pasangan warisan xlsread/xlswrite masih ditemui di kode lama tetapi tidak lagi disarankan. Alur baca–analisis–tulis tetap sama bentuknya di CSV — tinggal berganti ekstensi dan argumen. Format pertukaran berikutnya lebih ringan dan berbasis web: JSON.