Harici Çalışma Kitabı Başvuruları
Genel bakış
E-tablo modelleri genellikle çapraz başvuru formülleri kullanarak verileri ikincil çalışma kitaplarından çeker; HotXLS, hem BIFF8 (klasik XLS) hem de OpenXML (XLSX) belgelerinde harici çalışma kitabı başvurularını ayrıştırmayı, yazmayı ve korumayı destekler
Canlı çalışma kitabı çalışma alanı
lxWorkbookWorkspace içindeki TXLSWorkbookWorkspace, canlı harici çalışma kitapları için paylaşılan kimlik ve kayıt çekirdeğidir; hem TXLSWorkbook hem de TXLSXWorkbook, CreateWorkspaceWorkbook üyesini açığa çıkarır ve formül değerlendiricilerinin kullandığı bir ExternalWorkspace sahibidir; TXLSXWorkbook üzerinden açılan bir ODS çalışma kitabı ise OpenDocument motor türünü aynı bağdaştırıcı üzerinden bildirir
var
Host, Target: TXLSXWorkbook;
begin
Host.ExternalWorkspace.Add(
'..\Data\Target.xlsx',
'..\Data\Target.xlsx',
'C:\Models\Host.xlsx',
Target.CreateWorkspaceWorkbook);
// The compatibility facade maps an unambiguous name to the
// relationship target already stored in Host.ExternalLinks
Host.RegisterExternalWorkbook('Target.xlsx', Target);
// The matching call revokes a facade-level registration
Host.UnregisterExternalWorkbook('Target.xlsx');
end;
Klasik çalışma kitapları, TXLSWorkbook hedefleriyle aynı uyumluluk yöntemlerini kullanır; RegisterExternalWorkbook ve UnregisterExternalWorkbook yalnızca cephe (facade) düzeyindeki ad eşlemesini yönetirken ExternalWorkspace.Remove ve Clear, çalışma alanı kayıtlarının kendisini iptal eder. Farklı motorlardan gelen çağıranlar, herhangi bir Classic, XLSX veya ODS bağdaştırıcısını doğrudan ExternalWorkspace listesine ekleyebilir
- Kimlik normalizasyonu sözcüksel ve büyük/küçük harfe duyarsızdır; yolları ve uzantıları korur, göreli hedefleri sahip kaynak kimliğine göre çözümler, nokta segmentlerini daraltır ve hiçbir dosya sistemi ya da ağ erişimi yapmaz
- Tam kimlikler ve açık takma adlar önce çözümlenir; yalnızca taban ada dayalı arama, tam olarak bir bağlı kayıt eşleştiğinde başarılı olur, aksi hâlde
ResolvexlswrsConflictdöndürür Add, tam anahtar, takma ad ve yinelenen çalışma kitabı çakışmalarını reddeder; farklı tam yollar ve farklı uzantılar bir arada bulunabilirRemoveveClearkayıtları iptal eder; bir Classic veya XLSX hedefinin doğrudan yok edilmesi ise bağdaştırıcısının bağlantısını keser ve model serbest bırakılmadan önce etkin okuyucuların bitmesini bekler- Harici çalışma sayfaları, 1 tabanlı konumsal yedekten önce bildirilen adla çözümlenir; böylece hedef çalışma kitabının sayfa sırasının kaynak bağlantı diziniyle eşleşmesi gerekmez
- Formül değerlendirici önce çözümlenmiş canlı çalışma kitabını okur, ardından ana dosyanın türlenmiş önbelleğine düşer; Classic XLS ana bilgisayarları seyrek XCT ve CRN değerlerini çözerek okur, XLSX ana bilgisayarları ise paket modelinin zaten elinde bulundurduğu harici bağlantı önbelleğini kullanır
OnLoadWorkbookisteğe bağlı, denetimli bir kaynak isteğidir; varsayılan değerinil'dir, dolayısıyla uygulama kodu bu ilkeyi açıkça sağlamadıkça yeniden hesaplama yine de hiçbir dosya sistemi ya da ağ erişimi yapmaz- Normalleştirilmiş her kimlik,
ResetLoadAttemptsçağrılana kadar yükleyiciyi en fazla bir kez çağırır; eşzamanlı üst düzey istekler, aynı kaynağı tekrar tekrar açmak yerine devam eden sonucu — türlenmiş bulunamadı ve hata sonuçları dahil — paylaşır MaxLoadDepthvarsayılan olarak 16,MaxWorkbookCountise 64'tür; aynı kimliğe yeniden giriş, hâlen devam eden bir kimliğe iç içe bağımlılık, derinlik tükenmesi ve çalışma kitabı sayısı tükenmesi, bir yükleme döngüsünü bloke etmeden türlenmiş tanılamalar döndürür- ODF harici kaynak IRI'ları; URI şemaları ve tırnak içine alınmış karakterler dahil eksiksiz sözcüksel kimlikler olarak kalır, ancak asla örtük dosya ya da ağ erişimine izin vermez
- Bir kimlik çakışması
#REF!olarak kalır, böylece bayat önbellek verisi belirsiz yönlendirmeyi gizleyemez; önbellekte olmayan bir hücre, yalnızca dosya o sayfa için geçerli bir önbellek bildiriyorsa boş değer sayılır
Resolve, kayıtlı aramayı ve ardından isteğe bağlı denetimli yüklemeyi gerçekleştirir; sonucu bir TXLSWorkspaceResolveStatus değeridir (xlswrsResolved, xlswrsNotFound, xlswrsConflict, xlswrsDisconnected, xlswrsLoadNotFound, xlswrsLoadLimit, xlswrsLoadLoop veya xlswrsLoadError). ResolveWithLoader ayrıca bir TXLSWorkspaceLoadDiagnostic döndürür; bu, bulunamadı, yükleyici hatası, bağlantısı kesilmiş sonuç, derinlik ya da çalışma kitabı sınırı, kimliğe yeniden giriş, eşzamanlı bağımlılık ve kayıt çakışması sonuçlarını ayırt edebilmek için bir TXLSWorkspaceLoadDiagnosticCode ile TXLSWorkspaceLoadResponseStatus (xlswlrsNotFound, xlswlrsResolved, xlswlrsError) değerini eşleştirir. Yükleyici geri çağırması bir TXLSWorkspaceLoadRequest (kimlik, derinlik, kayıtlı sayısı, sınırlar) alır ve bir TXLSWorkspaceLoadResponse ile yanıt verir
Recalculate bir TXLSWorkspaceRecalcStatus bildirir, isteğe bağlı olarak bir TXLSWorkspaceRecalcResult dökümüyle birlikte; değerlendirici ayrıca hücre başına kaynak bilgisini bir TXLSWorkspaceRuntimeLookup (xlswrlInactive, xlswrlResolved, xlswrlFallbackCache veya xlswrlError) olarak kaydeder, böylece tanılama canlı okumayı önbellek yedekmesinden ayırt edebilir
IXLSWorkspaceWorkbook bağdaştırıcısı; EngineKind (tür TXLSWorkspaceEngineKind: xlsweClassic, xlsweOpenXml veya xlsweOpenDocument), SourceIdentity, InstanceIdentity ve Generation üyelerini açığa çıkarır, canlılığı IsConnected ile sınar, tek bir hücreyi TryGetCellValue üzerinden okur (değer, eksik, geçersiz başvuru, bağlantısı kesilmiş veya hata içeren türlenmiş bir TXLSWorkspaceCellStatus artı kullanılan aralık dışı bayrağı döndürür), modeli Recalculate ile tazeler ve Disconnect ile çalışma kitabı modelinden ayrılır
Kayıt mekanizması; kayıtlı bir kimliğe bağlanan ek adlar için AddAlias, istisnasız arama varyantı olarak TryResolve ve belirsiz olmayan bir hedef seçmeden önce kaç bağlı kaydın aynı taban adı paylaştığını görmek için BaseNameMatchCount üyelerini ekler
Çalışma kitapları arası bağımlılık grafiği
BuildDependencyGraph, kayıtlı her çalışma kitabı bağdaştırıcısının anlık görüntüsünü alır ve Classic XLS, XLSX ve ODS modellerinden formül düğümlerini tek bir TXLSWorkspaceDepGraph içinde çıkarır; kayıtlı bağdaştırıcılardan herhangi biri bağımlılık meta verisi sağlayamadığında yöntem False döndürür ve kısmi bir grafik üretmez
- Her formül düğümü; kanonik çalışma kitabı kimliğini, çalışma sayfası adını ve 1 tabanlı çalışma sayfası konumunu, 0 tabanlı hücre konumunu, dizi çıktı dikdörtgenini, uçuculuğunu ve çözümlenmemiş başvuru durumunu korur
- Hücre ve dikdörtgensel aralık başvuruları kanonik hedef çalışma kitabı ve çalışma sayfası kimliklerini korur; tüm sütun, tüm satır ve tüm sayfa başvuruları milyonlarca hücreye genişlemek yerine tek bir aralık olarak kalır
- Yerel tanımlı adlar simgesel bağımlılıklar olarak sorgulanabilir kalır ve tanım statik olarak çözümlenebiliyorsa somut hücre ya da aralık bağımlılıklarına da genişletilir
- Harici tanımlı adlar; harici bağlantı yuvasını, bildirilen adı, isteğe bağlı çalışma sayfası kapsamını ve kanonik hedef kimliğini korur; DDE, OLE veya kullanıcı işlevi meta verilerini çalışma kitabı adı olarak ele almaz
FindDependentsOfCellve grafik kenarı oluşturma, en büyük uç budamalı satır aralığı ağaçları kullanır;LastRangeCandidateChecksveEdgeCandidateChecks, başarım doğrulaması için yapılan kesin dikdörtgen denetimlerinin sayısını açığa çıkarır- Formül çıkarımı, çalışma kitabı okuma kiralıkları altında çalışır ve yalnızca somutlaştırılmış formül nesnelerini tarar; böylece paketlenmiş değer deposu paketli kalır ve grafik oluşturma, çalışma kitabı jenerasyonlarını değiştirmez
Zamanlanmış yeniden hesaplama
Recalculate, paylaşılan grafiği korur ve yalnızca çalışma alanı kaydı ya da bir çalışma kitabının formül bağımlılığı jenerasyonu değiştiğinde onu yeniden oluşturur; değer jenerasyonları yeni bir kirli geçişi başlatır ve kirli durum, çalışma kitapları arası bağımlılık kenarları boyunca yayılır
var
RecalcInfo: TXLSWorkspaceRecalcResult;
Status: TXLSWorkspaceRecalcStatus;
begin
Status := Workspace.Recalculate(RecalcInfo);
if Status <> xlswrcOk then
HandleWorkspaceCalculation(Status, RecalcInfo);
end;
- Güçlü bağlantılı bileşenler formül hücreleri üzerinde hesaplanır; böylece çalışma kitapları, hücre düzeyindeki bağımlılık yolları bir döngü oluşturmadığı sürece döngüsüz kalarak iki yönlü bağlanabilir
- Gerçek döngü üyeleri ve bir döngü tarafından engellenen kirli alt öğeler geçersiz kılınır ve topolojik sıranın dışında bırakılır; böylece bayat önbellek değerleri başarılı sonuç gibi sunulamaz
- Uçucu ya da statik olarak çözümlenemeyen başvurular, doğruluk için gereken muhafazakâr kirli davranışı zorunlu kılar; kararlı grafikler ise önceki bağımlılık işini yeniden kullanır
- Bir geçiş içindeki harici okumalar, kesin çalışma kitabı örneği, çalışma sayfası, satır ve sütun önbelleği kullanır; zamanlanmış bir formül, değerlendirmeden önce çıktı aralığını geçersiz kılar, böylece sonraki bağımlılar yeni değeri görür
- Geçişe yerel önbellek asla kaynak yetkisi vermez; kayıtlı çalışma kitapları ve isteğe bağlı, çağıranın denetimindeki yükleyici tek canlı çözümleme kaynağı olarak kalır, ardından türlenmiş dosya önbellekleri ve
#REF!gelir TXLSWorkspaceRecalcResult, grafiğin yeniden oluşturulup oluşturulmadığını ve kirli, değerlendirilen, geçersiz kılınan, döngü, engellenen, önbellek isabet ve önbellek ısk sayılarını açığa çıkarır- Durum; başarıyı, desteklenmeyen bağdaştırıcıları, bağlantısı kesik çalışma kitaplarını, dairesel başvuruları, hesaplama hatalarını ve geçiş sırasındaki çalışma alanı değişikliklerini birbirinden ayırır
- Aynı çalışma alanında
Recalculateçağrıları serileştirilir; böylece iki hesaplama oturumu asla paylaşılan grafiği veya çalışma kitabı önbelleklerini eşzamanlı olarak değiştirmez RemoveveyaClear, bir geçiş etkenken çalışabilir; geçiş, güvenli bağdaştırıcı anlık görüntülerini korur ve kaldırılmış bir kaydı yeniden referanslamak yerinexlswrcWorkspaceChangeddöndürür- Bir çalışma alanını yok etmek, etkin geçişinin bitmesini bekler; kayıtlı bir çalışma kitabını yok etmek ise bağdaştırıcısının bağlantısını keser ve sonraki çözümlemelerin güvenli biçimde başarısız olmasını sağlar
- Yükleyici hataları ve bulunamadı sonuçları,
ResetLoadAttemptsçağrılana kadar normalleştirilmiş kimlik başına bir kez önbelleğe alınır; başarısız bir hesaplama, açık bir yeniden deneme için yerel kirli durumu korur - Saklanan grafik, değişmemiş bir takip geçişini formül sayısına değil kayıtlı çalışma kitabı sayısına orantılı kılar; özyinelemesiz bileşen analizi ve kompakt aralık kenarları, derin ve geniş modelleri somutlaştırılmış formül meta verisiyle sınırlı tutar
Harici tanımlı adları ayırma
ConvertExternalDefinedNamesToRefErrors, TXLSWorkbook ve TXLSXWorkbook üzerinde aynı genel işlemi sağlar; yerel #REF! ile değiştirilen çalışma kitabı kapsamlı ve çalışma sayfası kapsamlı tanımların sayısını döndürür
var Converted: Integer; begin Converted := Workbook.ConvertExternalDefinedNamesToRefErrors; // External-link parts and ordinary cell formulas remain intact end;
- Classic XLS seçimi, derlenmiş BIFF başvuru belirteçlerini ve XTI destek çalışma kitabı kimliğini kullanır; böylece aynı çalışma kitabı içindeki üç boyutlu başvurular ve belirsiz belirteç akışları değişmeden kalır
- XLSX seçimi, ilişki belgesi sırasına göre sözdizimi duyarlı sayısal çalışma kitabı yuvalarını kullanır ve yalnızca çalışma kitabı harici bağlantı bölümlerini kabul eder; DDE, OLE, çözümlenmemiş yuvalar, tablo başvuruları ve dizelerin içindeki köşeli parantez metnini dışarıda bırakır
- Tüm değiştirmeler ilk değişiklikten önce hazırlanır ve tek bir yazma işlemi olarak işlenir; ikinci çağrı idempotenttir
- Ad metni, çalışma kitabı veya çalışma sayfası kapsamı, görünürlük, açıklamalar, makro ve yerleşik bayrakları, bilinmeyen XLSX öznitelikleri ve harici bağlantı dizini, dönüşümden ve Roundtrip'ten sonra da kullanılabilir kalır
- Bozuk ve desteklenmeyen tanımlar mümkün olduğunca bayt veya metin düzeyinde korunur ve tahmin yürütülmek yerine
xlsDiagnosticDefinedNameConversionSkippedtanılamaları eklenir - Bağımlı formüller, karşılık gelen Excel hata değeriyle yeniden hesaplanır; sıradan bir doğrudan harici formül için geçerli önbellek sonucu ise canlı çalışma kitabı sonradan bağlantısını kesse bile kullanılabilir kalır
- İşlem Excel'e özgüdür ve OpenDocument ad-formül semantiğini yeniden yorumlamaz
Klasik XLS harici başvurular
Klasik XLS çalışma kitaplarında, harici bağlantılar EXTERNALBOOK ve EXTERNNAME kayıtları kullanılarak genel dizin bloğunda saklanır; HotXLS, bu dizinleri dosya okuma/yazma döngüleri sırasında korur ve uzak aralık başvurularının değişiklik döngülerinden sağlam çıkmasını sağlar
XLSX harici ilişkiler
OOXML çalışma kitapları için harici bağlantı eşlemesi ilişki parçaları aracılığıyla yönetilir; aşağıdaki destekleyici arayüz ayrıntılarına bakın
- TXLSXExternalLinks sınıfı — E-tablo harici bağlantılarını listeleme ve güncelleme API'si
- IXLSWorkbook arayüzü — Üst düzey çalışma kitabı özellikleri
- IXLSRange.Formula özelliği — Çalışma kitapları arası formülleri okuyun ve yazın