HotXLS, Delphi'den AddCamera aracılığıyla XLSX çalışma sayfalarında Excel kamera nesneleri oluşturur. Bir kamera nesnesi, bir hücre aralığına kalıcı olarak bağlı bir resimdir: Excel, çalışma kitabı her açıldığında veya kaynak değiştiğinde onu kaynak aralıktan yeniden render eder, bu yüzden bir gösterge paneli, başka bir sayfada yaşayan bir tablonun canlı görünümünü, istediğiniz boyutta ve isterseniz döndürülmüş şekilde gösterebilir
Bu özellik Excel'de Kamera aracı olarak var olur; varsayılan olarak şeritte olmadığı için çoğu kullanıcının hiç görmediği bir düğmedir. Gerçek bir gösterge paneli sorununu alternatiflerinden daha iyi çözer: kopyalanmış bir aralık bayatlar, bir grafik rastgele hücre içeriği gösteremez ve elle yapıştırılmış bağlantılı bir resim kod tarafından üretilemez. Bir kamera nesnesi hem canlı hem de rastgele olan tek yapıdır
Bu Nerede Belgelenmiştir ve Bu Neden Önemlidir?
Ana elektronik tablo spesifikasyonu kamera nesnelerini tanımlamaz; bunlar bir uygulama ayrıntısı olarak ele alınır. Yetkili açıklama, çizim-biçimlendirme belgelerinde, Kamera Aracı başlığı altında yaşar ve bunu bilmek yanlış belgede aramakla geçecek bir öğleden sonrayı kurtarır
Yapısal olarak bir kamera nesnesi, görsel olmayan resim özellikleri bir uzantı listesi taşıyan sıradan bir resim öğesidir. Uzantı sabit bir GUID ile tanımlanır ve içinde 2010 çizim ad alanından bir öğe iki şeyi kaydeder: kaynak aralığı isteğe bağlı olarak sayfa nitelikli bir A1 stili mutlak referans olarak ve bir şekil tanımlayıcısı. Resim hakkındaki her şey diğer normaldir
Bir Tane Oluşturmak
Bir aralığı adlandırmanın iki yolu uygun olduğu için iki aşırı yükleme vardır. Metin biçimi, referansı tam olarak saklanacağı şekilde alır; bu, sayfalar arası bir kaynak için istediğiniz şeydir. Koordinat biçimi, aynı sayfadaki dört hücre koordinatını alır ve sizin için mutlak referansı oluşturur:
uses
lxHandleX;
var
Book: TXLSXWorkbook;
Dashboard: TXLSXWorksheet;
Cam: TXLSXImage;
begin
Book := TXLSXWorkbook.Create;
try
if Book.Open('reporting.xlsx') <> 1 then
Exit;
Dashboard := Book.Sheets[0];
// Data!$B$2:$D$4'ün canlı görünümü, gösterge panelinde B10:F20 üzerine yerleştirildi
Cam := Dashboard.AddCamera('Data!$B$2:$D$4', 10, 2, 20, 6);
// Yerleştirme kutusu, Excel'in kendi 64 piksel sütunlarına ve
// 20 piksel satırlarına varsayılan olur; gerekirse çizilen boyutu sonradan EMU cinsinden ayarlayın
Cam.WidthEMU := Round(12.5 * 914400 / 2.54); // 12.5 cm
Cam.HeightEMU := Round(6.0 * 914400 / 2.54);
Book.SaveAs('reporting-dashboard.xlsx');
finally
Book.Free;
end;
end;
Döndürülen nesne, resim tam olarak bir kamera olduğunda boş olmayan tek bir ek özelliğe, CameraRange'e sahip normal bir resim nesnesidir. Sizin oluşturmadığınız bir çalışma kitabındaki kameraları da bu şekilde tespit edersiniz: resimleri numaralandırın ve özelliği kontrol edin
Yer Tutucu Görüntünün Neden Gerçek Olması Gerekmez?
Bir XLSX paketindeki her resmin bir görüntü parçasına ihtiyacı vardır ve bir kamera nesnesi de istisna değildir. Ama Excel bu görüntüyü göz ardı eder: yüklemede bağlantılı aralığı yeniden render eder ve sonucu boyar. Gömülü baytlar, yalnızca kamera davranışını uygulamayan araçlar için bir görüntüleme önbelleği olarak var olur
Bu gerçek, uygulamadan tüm bir alt sistemi kaldırır. Kaynak aralığı rasterize etmeye gerek yoktur, anlık görüntüyü üretecek bir render motoruna gerek yoktur ve önbelleğe alınmış görüntünün Excel'deki canlı olanla uyuşmaması riski yoktur. HotXLS, minimal bir yer tutucu metafile yazar — bir başlık kaydı ve bir dosya sonu kaydı, toplam 108 bayt — bu, paketi yapısal olarak tam tutar ve hiçbir şeye mal olmaz
Planlanması gereken bir sonuç: kamera nesnelerini uygulamadan XLSX render eden bir görüntüleyici, boş olan yer tutucuyu gösterir. Çalışma kitaplarınız böyle bir araç tarafından tüketiliyorsa bir kamera nesnesi yanlış yapı, aralığın render edilmiş bir görüntüsü ise doğru yapıdır
Yanlış Yapılması Kolay Olan Birim Dönüşümü
Open XML'deki çizim geometrisi, bir inçin 914.400 EMU ve bir santimetrenin 360.000 olduğu English Metric Units (İngiliz Metrik Birimleri) cinsinden ölçülür. Ancak metafile başlıkları, çerçevelerini 0,01 milimetre biriminde kaydeder. Aralarındaki dönüşüm 360'a bölmedir
Bunu adlandırmaya değer, çünkü hata sessizdir. Bunun yerine 96 DPI'de pikseller üzerinden dönüştürmek — 2540 ile çarpıp 9525'e bölmek — 96 kat çok büyük bir değer üretir ve hiçbir şey onu reddetmez: paket geçerlidir, resim çapa tarafından doğru yerleştirilir ve yalnızca metafile'ın bildirilen çerçevesi anlamsızdır. EMU modeli ve yuvarlama davranışı, görüntü geometrisi, EMU birimleri ve ölçeklendirme başlığında ele alınmıştır
Zaten Kameralara Sahip Bir Çalışma Kitabını Gidiş-Dönüş Yapmak
Bir çalışma kitabını açıp kaydetmek, uzantı öğesi ve aralık referansı da dahil olmak üzere kamera nesnelerini korur. Bu, onları oluşturmaktan daha önemlidir: kamera nesnelerine sahip çoğu çalışma kitabı bir analist tarafından Excel'de yapılmıştır ve kayıtta bunları sessizce sıradan resimlere dönüştüren bir kitaplık, analistin güvendiği canlı davranışı yok etmiştir
// Hangi resimlerin kamera olduğunu ve nereyi işaret ettiklerini denetle
for I := 0 to Sheet.Images.Count - 1 do
if Sheet.Images[I].CameraRange <> '' then
Writeln(Format('camera %d -> %s',
[I, Sheet.Images[I].CameraRange]));
Gösterge panellerini programatik olarak ürettiğinizde denetim aynı zamanda regresyon testidir: bir kaydet-ve-yeniden-aç döngüsünden sonra aynı sayıda kamera aynı aralıkları işaret etmelidir. Onları konumlandıran çapalama modeli de dahil olmak üzere genel resim ve çizim işleme, grafikler, resimler ve çizimler başlığında ele alınmıştır
Bir Kamera Alternatiflerini Ne Zaman Geçer
Aynı canlı tablonun birkaç sayfada farklı boyutlarda görünmesi gerektiğinde, bir yazdırma düzeninin bir sayfanın bir bölgesinin diğerlerinin bölgeleriyle birlikte oluşturulmasına ihtiyaç duyduğunda veya bir özet bloğunun, her hücreyi ayrı ayrı bağlayan bir formül olmadan başka yerde yapılan düzenlemeleri takip etmesi gerektiğinde bir kamera nesnesi kullanın
Hedef bir avuç hücreyse sıradan formülleri tercih edin, çünkü sayfalar arası bir formül daha basittir ve her araç onu anlar. Veri gerçekten biçimlendirilmiş bir blok değil de bir seriyse bir grafiği tercih edin. Ve çalışma kitabı Excel dışındaki araçlar tarafından tüketilecekse veya anlık görüntü teslimattan sonra değişmemesi gerekiyorsa render edilmiş bir görüntüyü tercih edin — arşivlenmiş bir rapor canlı olmamalıdır
Uygulamadan bir düzen notu: bir kamera, birleştirilmiş hücreler, koşullu biçimler ve sütun genişlikleri dahil olmak üzere kaynak aralığı tam olarak biçimlendirildiği gibi gösterir. Bu yüzden temiz görünen bir gösterge paneli bloğu elde etmek, kaynak aralığı sanki bitmiş çıktıymış gibi biçimlendirmekle başlar; bu, birleştirilmiş hücreler ve rapor şablonu düzeni başlığında anlatılan aynı disiplindir
Kamera nesneleri, çizimler ve arkalarındaki XLSX paket yazıcısı, Delphi ve C++Builder için tek bir kitaplıkta gelir; eksiksiz özellik listesi HotXLS Delphi elektronik tablo bileşeni sayfasında bulunur