HotXLS membuat Sparkline Excel — bagan mini yang digambar Excel di dalam satu sel — dari Delphi dan C++Builder dengan satu panggilan: TXLSXWorksheet.AddSparklineGroup membangun grup sparkline di atas rentang data, dan menyimpan buku kerja akan menulisnya sebagai blok ekstensi x14 di dalam lembar kerja extLst, yang dirender oleh Excel 2010 dan versi lebih baru sedangkan pembaca lama melewatinya tanpa keluhan. Tanpa objek bagan, tanpa bagian gambar, tanpa jangkar
Skenario yang membuat sparkline sangat berharga selalu sama. Buku kerja dasbor (dashboard) menampung beberapa ratus baris, masing-masing untuk produk atau wilayah atau akun, masing-masing dua belas data bulanan, dan seseorang menginginkan glif tren di akhir setiap baris. Jika itu dimodelkan dengan bagan nyata, Anda akan membuat ratusan bagian bagan DrawingML, masing-masing dengan bagian XML, hubungan, dan geometri jangkar sendiri, belum lagi apa pengaruhnya terhadap ukuran berkas dan waktu pembukaan. Grup sparkline adalah satu blok XML yang menyatakan "gambar garis kecil dari B2:M2 ke N2, dan dari B3:M3 ke N3," yang diulangi secara hemat untuk baris sebanyak yang Anda miliki
Mengapa sparkline berupa ekstensi x14 alih-alih bagan?
Sparkline hadir di Excel 2010, tiga tahun setelah skema basis ECMA-376 dibekukan, sehingga tidak dapat ditempatkan di markup lembar kerja yang sebenarnya tanpa merusak setiap pembaca yang ada. Jawaban Microsoft adalah mekanisme daftar ekstensi: lembar kerja dapat diakhiri dengan elemen <extLst> yang menampung blok <ext>, masing-masing ditandai dengan URI yang mengidentifikasi fitur tersebut ([MS-XLSX] §2.3.6). Sparkline menggunakan URI {05C60535-1F16-4fd2-B633-F4F36F0B64E0} dan namespace x14. Pembaca yang mengenali GUID akan mengurai blok tersebut; pembaca yang tidak mengenali diharuskan untuk melewatinya. Itulah seluruh cerita kompatibilitas ke depan (forward-compatibility), dan itulah mengapa Excel 2007 membuka buku kerja sparkline dengan bersih — ia hanya menampilkan angka sumber tanpa glif
Satu detail dari mekanisme ini patut diperhatikan karena bertentangan dengan asumsi umum: tidak ada deklarasi mc:Ignorable yang diperlukan pada root lembar kerja. Gerbang ext GUID sudah cukup dengan sendirinya, dan penulis Excel sendiri mendeklarasikan namespace x14 secara lokal pada elemen <ext> alih-alih menyentuh root. HotXLS mengikuti pola yang sama, yang menjaga sisa XML lembar kerja tidak tersentuh. Ini juga merupakan perbedaan struktural dari bagan nyata: bagan adalah bagian DrawingML terpisah dengan pipa rendering-nya sendiri, yang dibahas dalam artikel pendamping tentang bagan, gambar, dan lukisan, sedangkan sparkline adalah metadata lembar kerja yang dilukis oleh kisi spreadsheet itu sendiri
Bagaimana cara menambahkan sparkline ke berkas XLSX secara terprogram?
TXLSXWorksheet.AddSparklineGroup(AType, ASourceRange, ALocation) adalah jalur satu panggilan: ia membuat grup dari jenis yang diberikan, mengisinya dengan warna seri default Excel, dan menambahkan pemetaan sparkline pertama rentang sumber berkualifikasi lembar kerja ke sel host. TXLSXSparklineGroup yang dikembalikan kemudian menerima lebih banyak sparkline melalui metode Add-nya, satu pasang F/Sqref per baris, semuanya berbagi jenis dan pemformatan grup. Untuk kasus dasbor, itulah bentuk yang Anda inginkan: satu grup, satu set opsi visual, ratusan anggota
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
Grp: TXLSXSparklineGroup;
Row: Integer;
begin
Book := TXLSXWorkbook.Create;
try
Book.Open('dashboard.xlsx');
Sheet := Book.Sheets[0];
// Satu grup: setiap baris produk berbagi jenis dan pemformatan
Grp := Sheet.AddSparklineGroup(xlsxSparklineLine,
'Sheet1!B2:M2', 'N2');
for Row := 3 to 201 do
Grp.Add(Format('Sheet1!B%d:M%d', [Row, Row]),
Format('N%d', [Row]));
Book.SaveAs('dashboard-trends.xlsx');
finally
Book.Free;
end;
end;
TXLSXSparklineType mencakup tiga jenis yang ditawarkan Excel: xlsxSparklineLine untuk garis tren, xlsxSparklineColumn untuk bagan batang kecil, dan xlsxSparklineStacked untuk strip win/loss di mana setiap nilai dirender sebagai blok atas atau bawah. Setiap anggota sparkline hanyalah dua string — F, rentang sumber berkualifikasi lembar kerja, dan Sqref, sel tempat glif digambar — jadi tidak ada hal lain yang perlu dikonfigurasi per baris. Grup juga dapat dibangun sepenuhnya secara manual melalui koleksi Worksheet.SparklineGroups ketika Anda ingin memulai dari grup kosong alih-alih default yang diisi
Penanda, slot warna, dan penskalaan sumbu pada model bertipe
TXLSXSparklineGroup mengekspos set opsi lengkap dari pita Sparkline Tools Excel sebagai properti biasa. Enam pengalih boolean menekankan titik data: Markers untuk setiap titik pada sparkline garis, ditambah HighPoint, LowPoint, NegativePoints, FirstPoint, dan LastPoint. Delapan slot warna ARGB berpasangan dengan mereka — ColorSeries, ColorNegative, ColorAxis, ColorMarkers, ColorFirst, ColorLast, ColorHigh, ColorLow — dengan konvensi bahwa slot yang dibiarkan bernilai 0 diabaikan dari berkas dan Excel menerapkan default-nya sendiri. Bentuk ARGB sepenuhnya buram (fully-opaque) yang sama muncul di seluruh pustaka, sehingga $FFD00000 di sini berarti warna merah yang sama dengan warna merah di gaya pemformatan bersyarat
Grp := Sheet.AddSparklineGroup(xlsxSparklineStacked,
'Sheet1!B2:M2', 'N2');
Grp.NegativePoints := True; // bulan yang merugi terlihat menonjol
Grp.ColorNegative := $FFD00000;
Grp.HighPoint := True;
Grp.ColorHigh := $FF00B050;
Grp.MinAxisType := xlsxSparklineAxisGroup; // satu skala untuk semua baris
Grp.MaxAxisType := xlsxSparklineAxisGroup;
Grp.DisplayEmptyCellsAs := xlsxSparklineEmptyGap;
Properti sumbu perlu dipikirkan sejenak sebelum Anda menerima nilai default. MinAxisType dan MaxAxisType masing-masing mengambil penskalaan individual, grup, atau kustom: penskalaan individual meregangkan setiap sparkline ke nilai min dan maks-nya sendiri, yang membuat baris yang terombang-ambing antara 99 dan 101 terlihat sedramatis baris yang nilainya meningkat tiga kali lipat. Penskalaan grup menempatkan setiap anggota pada satu skala vertikal bersama yang sama, sehingga tinggi glif berarti kuantitas yang sama di setiap baris — biasanya apa yang diinginkan oleh dasbor perbandingan. DisplayEmptyCellsAs menentukan apa yang dilakukan sel sumber kosong pada garis: membiarkan celah, dihitung sebagai nol, atau menjembatani lubang dengan menghubungkan sel tetangganya
Apa yang ditulis HotXLS ke dalam extLst lembar kerja saat disimpan
Saat disimpan, HotXLS menserialisasikan setiap grup sebagai elemen x14:sparklineGroup yang membawa atribut jenis dan pengalih, slot warna sebagai elemen anak, dan daftar x14:sparklines yang anggotanya memasangkan rumus rentang xm:f dengan sel host xm:sqref. Seluruh struktur berada di dalam <extLst><ext uri="{05C60535-1F16-4fd2-B633-F4F36F0B64E0}"> di akhir bagian lembar kerja, dengan namespace x14 dideklarasikan tepat pada blok tersebut, persis seperti yang ditulis Excel. Lembar kerja tanpa grup sparkline tidak memancarkan extLst sama sekali, sehingga berkas yang tidak pernah menggunakan fitur tersebut keluar dengan byte demi byte yang identik dengan apa yang dihasilkan versi HotXLS sebelumnya — disiplin penulis konservatif (conservative-writer) yang sama yang dijelaskan dalam artikel tentang infrastruktur round-trip lossless
Satu detail spesifikasi penting jika Anda membandingkan keluaran dengan milik Excel atau memeriksa XML secara manual: default skema untuk lineWeight is 0.75 poin, bukan 1.25 yang dikutip beberapa sumber sekunder — [MS-XLSX] mendefinisikan CT_SparklineGroup@lineWeight dengan nilai default 0.75, cocok dengan bobot garis yang sebenarnya diterapkan oleh UI Excel. HotXLS menghormati default tersebut secara tidak langsung: atur LineWeight ke nilai apa pun selain 0.75 dan atribut tersebut ditulis, biarkan bernilai 0.75 dan tidak ditulis. Kesalahan dalam hal ini di kedua arah akan menghasilkan berkas yang dirender sedikit lebih tebal atau lebih tipis daripada buku kerja yang sama yang disimpan dari Excel
Round-trip, salinan lembar kerja, dan ekstensi yang tidak dimodelkan HotXLS
Membuka adalah cerminan dari menyimpan. Ketika HotXLS membuka buku kerja yang membawa sparkline — baik HotXLS maupun Excel yang menulisnya — parser akan mendeteksi GUID ekstensi sparkline dan membangun kembali setiap grup, anggota, warna, dan opsi sumbu ke dalam model bertipe, sehingga siklus buka→edit→simpan mempertahankannya sepenuhnya. Menyalin lembar kerja ke buku kerja lain akan mengkloning grup sparkline-nya bersama dengan sisa lembar kerja lainnya, yang membuat pembuatan laporan berbasis templat menjadi mudah: pertahankan lembar templat yang bergaya, salin per laporan, dan arahkan kembali rentangnya
extLst juga dapat berisi blok ekstensi yang tidak memiliki model bertipe di HotXLS — Excel menulis blok x14 untuk fitur seperti slicer dan pemformatan bersyarat yang diperluas ke dalam daftar yang sama. Sejak versi 2.131.0, blok asing tersebut dipertahankan secara verbatim di sepanjang round-trip alih-alih dibuang: parser menangkapnya, mengeksposnya secara read-only melalui Worksheet.RawWorksheetExts, dan menulisnya kembali saat disimpan, serta berpindah bersama lembar kerja ketika disalin ke buku kerja lain. XML yang dipertahankan dibangun kembali dari peristiwa parser (parser events), sehingga secara semantik setara dengan aslinya alih-alih identik dalam byte, tetapi Excel menerimanya dan fitur tersebut bertahan. Konsekuensi praktisnya adalah hal yang penting dalam produksi: membuka buku kerja pelanggan dan menyimpannya kembali tidak lagi menghapus ekstensi yang tidak Anda minta untuk dipahami oleh HotXLS
Batasan yang jujur: sparkline dirender di Excel 2010 dan versi lebih baru, dan di pembaca lain mana pun yang menerapkan ekstensi x14; Excel 2007 menampilkan data tanpa glif, yang merupakan penurunan kualitas yang memang dirancang untuk format tersebut. Ketiga jenis sparkline, delapan slot warna, pengalih titik, dan tiga mode sumbu mencakup seluruh opsi yang ditawarkan oleh dialog Excel sendiri. Dukungan sparkline, bersama dengan sisa mesin XLSX yang ditunjukkan di sini, dikirimkan dalam HotXLS Delphi Excel Component untuk Delphi dan C++Builder