HotXLS, =[Rates.xlsx]FX!B4*C10 gibi bir formülü, bayat bir önbelleğe alınmış değere karşı değil bellekte açık olan başka bir çalışma kitabına karşı değerlendirebilir. İkinci çalışma kitabını RegisterExternalWorkbook ile ada göre kaydedersiniz ve her yeniden hesaplama, referans verilen hücreleri doğrudan o nesneden okur. Kaydını kaldırdığınızda değerlendirme, dosyanın zaten taşıdığı dış bağlantı önbelleğine geri döner
Bu, belirli ve can sıkıcı bir boşluğu kapatır. Excel çalışma kitapları birbirine rutin olarak referans verir: bir oran tablosu, bir hesap planı, başka bir ekip tarafından tutulan bir fiyat listesi. Böyle bir dosya Excel yerine bir kitaplık tarafından açıldığında, bu referanslar normalde Excel'in en son yeniden hesapladığı zaman önbelleğe alınmış değerlere çözümlenir; bu aylar önceki bir değer olabilir ve ne kadar yeniden hesaplarsanız hesaplayın bunu düzeltemezsiniz, çünkü veri orada basitçe bulunmaz
Bir Çalışma Kitapları Arası Referans Dosyanın İçinde Nasıl Görünür?
Bir dış referans, formül çubuğunda gördüğünüz metin olarak saklanmaz. Çalışma kitabı, destekleyici kitapların bir tablosunu tutar, her formül belirteci o tablodaki bir indeksi işaret eder ve ayrı bir önbelleğe alınmış değerler bölümü, referans verilen her hücre için bilinen son sonucu tutar. Bu yüzden yandaşları olmadan açılan bir dosya yine de sayılar gösterir
Metin biçimini ayrıştırmanın kendi incelikleri vardır. Sözcük çözümleyici, köşeli parantezli bir kitap adını tek bir tanımlayıcının parçası olarak ele alır, bu yüzden [Book.xlsx]Sheet!A1, dengesiz bir köşeli parantezin ardından gelen bir sayfa referansı yerine tek bir belirteç olur. Adlar ardından arama için normalize edilir: tırnak işaretleri, yol önekleri, dosya uzantısı ve sayısal indeks biçiminin hepsi büyük harfli bir taban ada çöker, bu yüzden 'C:\Rates\[Rates.xlsx]FX'!B4 ve [rates.xlsx]FX!B4 aynı kayıtlı kitaba çözümlenir
Bir Çalışma Kitabını Kaydetme ve Yeniden Hesaplama
Kayıt ada göre yapılır ve bu ad, referans veren çalışma kitabının formüllerinde görünen addır:
uses
lxHandleX;
var
Main, Rates: TXLSXWorkbook;
begin
Main := TXLSXWorkbook.Create;
Rates := TXLSXWorkbook.Create;
try
if (Main.Open('valuation.xlsx') <> 1) or
(Rates.Open('rates.xlsx') <> 1) then
Exit;
// valuation.xlsx içindeki [Rates.xlsx]... diyen formüller artık
// önbelleğe alınmış dış değerler yerine canlı nesneden okuyor
Main.RegisterExternalWorkbook('Rates.xlsx', Rates);
Main.Recalculate;
Writeln(VarToStr(Main.Sheets[0].Cells[10, 3].Value));
// Kaynağı değiştirip tekrar yeniden hesaplayın: yeni değer aktarılır
Rates.Sheets[0].Cells[4, 2].Value := 1.0842;
Main.Recalculate;
Writeln(VarToStr(Main.Sheets[0].Cells[10, 3].Value));
finally
Main.UnregisterExternalWorkbook('Rates.xlsx');
Rates.Free;
Main.Free;
end;
end;
Kayıt zayıf bir referans tutar. HotXLS, kaydedilen çalışma kitabının sahipliğini almaz ve onu serbest bırakmaz; bu, ömrünün sizin yönetmeniz gerektiği ve sıralamanın önemli olduğu anlamına gelir: kaynak çalışma kitabını serbest bırakmadan önce kaydını kaldırın, ya da en azından onu serbest bıraktıktan sonra yeniden hesaplamayın
Bir Kitap Kayıtlı Değilse Ne Olur?
Değerlendirme, dosyada saklanan dış bağlantı önbelleğine geri döner; bu, tam olarak yandaşları olmadan açılan bir çalışma kitabının davranışıdır. Bu yedek, kaydı kaldırmanın yıkıcı değil güvenli olmasının nedenidir
Kaydı kaldırdıktan sonraki davranışı kesin olarak belirtmeye değer, çünkü insanları şaşırtır. Bir referans ne kayıtlı bir kitaptan ne de önbellekten çözümlenebildiğinde değerlendirme bir hata üretir ve bu hata hücreye geri yazılmaz. Hücre son hesaplanan değerini korur. Kaynağı yeniden kaydedip yeniden hesaplayın, değer tekrar güncellenir
Bu başarısızlıkta-koruma kuralı kasıtlıdır. Alternatifi, bir kaynak kullanılamaz hale geldiği anda her bağımlı hücreye bir hata değeri yazmak, geçici olarak eksik bir oran tablosunu, daha sonraki başarılı bir yeniden hesaplamanın onarması gereken hata işaretleriyle dolu bir çalışma kitabına dönüştürürdü. Son iyi değeri korumak, kesintiye uğramış bir boru hattının yine de mantıklı okunan bir belge bırakması anlamına gelir
Kirli Yayılma Çalışma Kitabı Sınırında Durur
Kayıtlı kaynaktaki bir hücreyi düzenlemek, ana çalışma kitabındaki bağımlı hücreleri kirli olarak işaretlemez. Artımlı yeniden hesaplama, bağımlılıkları tek bir çalışma kitabının içinde izler; sınır boyunca izlemez. Excel de aynı şekilde davranır; dış referanslarının sürekli değil açılışta veya açık bir yenilemede güncellenmesinin nedeni budur
Pratik sonuç, bir kaynak değeri değiştirmenin, yukarıdaki örnekte olduğu gibi referans veren çalışma kitabının açık bir yeniden hesaplamasını gerektirmesidir. Uygulamanız her iki kitabı da bir döngüde düzenliyorsa her düzenlemeden sonra değil sonunda bir kez yeniden hesaplayın; artımlı yeniden hesaplama ve bağımlılık grafiği başlığında anlatılan artımlı motor, ardından her çalışma kitabının içinde minimum işi yapar
Bu Özelliğin Uyduğu Üç Kalıp
Konsolidasyon bariz olandır. Bir üst çalışma kitabı on iki aylık dosyaya referans verir; on ikisini de kaydedin, bir kez yeniden hesaplayın ve Excel'i hiç açmadan konsolide rakamları okuyun. Her biri için kayıt adı, üst kitabın formüllerinin gerçekte söylediğiyle eşleşmelidir; bunun dosya adıyla eşleştiğini varsaymak yerine formül metnine karşı doğrulamaya değer
Senaryo analizi ikincisidir. Bir kaynağı kaydedin, içine bir dizi varsayım yazın, bağımlı modeli yeniden hesaplayın, çıktıları kaydedin, ardından tekrarlayın. Kaynak canlı bir nesne olduğundan, yinelemeler arasında hiçbir dosya yazılmaz ve yüz senaryo, yüz kaydet-ve-yeniden-yükle döngüsü yerine yüz yeniden hesaplamaya mal olur
Teslimattan önce doğrulama üçüncüsü ve en az bariz olanıdır. Bir çalışma kitabını açın, yandaşlarını kaydedin, yeniden hesaplayın ve sonuçları dosyanın zaten taşıdığı değerlerle karşılaştırın. Bir uyumsuzluk, önbelleğe alınmış değerlerin bayat olduğu anlamına gelir; bu, bir müşteri dosyayı almadan önce yakalanmaya değer bir kusurdur. Bu karşılaştırma, iki Excel çalışma kitabını karşılaştırma başlığında anlatılan çalışma kitabı diff'lemesinin doğal bir yoldaşıdır
Güvenmeden Önce Referans Hijyeni
Önce bir formül analizi geçişi çalıştırın. Tek bir dolaşımda eksik işlevleri, dış referansları ve döngüsel bağımlılık bileşenlerini raporlar; bu da dosyaları aramaya başlamadan önce bir belgenin tam olarak hangi kitap adlarını beklediğini size söyler:
var
Issues: TArray<TXLSXFormulaIssue>;
I: Integer;
begin
Issues := Main.AnalyzeFormulaIssues;
for I := 0 to High(Issues) do
if Issues[I].Kind = xlsxFormulaIssueExternalReference then
Writeln(Format('sheet %d R%dC%d needs [%s] (%s)',
[Issues[I].Sheet, Issues[I].Row, Issues[I].Col,
Issues[I].ExternalWorkbook, Issues[I].SourceFileName]));
end;
İki alışkanlık daha zaman kazandırır. Kayıt adını kanonik tutun — düz dosya adı altında kaydedin ve normalleştirmenin formüllerdeki tırnaklı ve yol önekli varyantları ele almasına izin verin. Ve sağlayamayacağınız dosyalara referans veren bir çalışma kitabını salt okunur bir eser olarak ele alın: onu yeniden hesaplamak önbelleğe alınmış değerleri koruyacaktır, ama bağımlı bir hücreyi değiştiren herhangi bir düzenleme, belgeyi bazı değerlerin güncel bazılarının ise tarihsel olduğu ve dosyada hangisinin hangisi olduğunu söyleyen hiçbir şeyin bulunmadığı bir durumda bırakır. Formülleri çalışma kitapları arasında kopyalamak, kendi yeniden bağlama kurallarına sahip farklı bir işlemdir; çalışma kitapları arası kopyalama ve formül yeniden bağlama başlığında ele alınmıştır ve adlandırılmış aralıklar, tanımlı adlar ve sayfalar arası formüller başlığında anlatılan başka bir katman ekler
Canlı çalışma kitapları arası değerlendirme, artımlı yeniden hesaplama ve formül analizi, Delphi ve C++Builder için aynı motor üzerinde çalışır; eksiksiz özellik listesi HotXLS Delphi elektronik tablo bileşeni sayfasında bulunur