HotXLS Docs

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 Resolve xlswrsConflict dö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 bulunabilir
  • Remove ve Clear kayı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
  • OnLoadWorkbook isteğe bağlı, denetimli bir kaynak isteğidir; varsayılan değeri nil'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
  • MaxLoadDepth varsayılan olarak 16, MaxWorkbookCount ise 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
  • FindDependentsOfCell ve grafik kenarı oluşturma, en büyük uç budamalı satır aralığı ağaçları kullanır; LastRangeCandidateChecks ve EdgeCandidateChecks, 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
  • Remove veya Clear, 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 yerine xlswrcWorkspaceChanged dö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 xlsDiagnosticDefinedNameConversionSkipped tanı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