HotXLS Docs

Büyük E-Tablo Akışı

Genel bakış

Çok büyük e-tabloları (ör. milyonlarca dolu hücre) belleğe yüklemek, 32 bitlik süreçlerde bellek yetersizliği hatalarına yol açabilir; HotXLS, çalışma kitabı ayrıştırması sırasında DOM oluşturmayı atlayan ve neredeyse sabit bellek kullanımına sahip akış okuyucuları ve yazıcıları sağlar

Doğrudan Okuyucu API'si

TXLSDirectReader sınıfı, bellek içi hücre modelleri oluşturmadan çalışma kitabı akışlarını ayrıştırır ve seçilen hücrelerle karşılaşıldıkça OnSheet ve OnCell olaylarını tetikler

Reader := TXLSDirectReader.Create;
try
  Reader.ParallelSheets := True;
  Reader.ParallelMaxThreads := 4;
  Reader.ParallelBufferMemoryLimit := 16 * 1024 * 1024;
  Reader.OnDimension := HandleDimension;
  Reader.OnColumn := HandleColumn;
  Reader.OnRow := HandleRow;
  Reader.OnMerge := HandleMerge;
  Reader.OnCell := HandleCell;
  Reader.ReadFile('large.xlsx');
finally
  Reader.Free;
end;

ParallelSheets, worker'a özgü çalışma sayfası inflater ve XML okuyucularını devreye alır; geri çağrıları ise çağıran iş parçacığı, çalışma sayfası ve hücre sırasına göre yayımlar

ParallelBufferMemoryLimit, etkin worker'lar genelinde kuyruktaki ham hücre yükünün toplamını sınırlar ve varsayılan olarak 16 MiB'dir; ParallelPeakBufferedBytes ise son paralel okumanın zirvesini tanılama ve kapasite testleri için raporlar

Her etkin çalışma sayfası, kuyruk bütçesinden bağımsız bir pay alır; böylece daha sonra gelen bir çalışma sayfası, o anda yayımlanmakta olan sayfayı açlıktan düşüremez. Payından büyük tek bir hücre, indirgenemez yük olarak kabul edilir

OnDimension, OnSheetFormat, OnColumn, OnRow, OnPane ve OnMerge; kullanılan aralığı, varsayılan genişlik ve yükseklikleri, sütun kapsamlarını, satır yüksekliğini veya görünürlüğünü, anahat ve stil dizinlerini, bölme durumunu ve birleştirilmiş aralıkları çalışma sayfası nesnelerini oluşturmadan ortaya koyar

Yerleşim geri çağrıları isteğe bağlıdır ve seçilen sayfanın OnCell geri çağrılarından önce, sınırlı bellekli bir meta veri geçişinde çalışır; dolayısıyla OOXML mergeCells öğesini sheetData'dan sonra saklasa da birleştirme aralıkları, birleştirmenin içindeki hücrelerden önce ulaşır

Paralel sayfa ayrıştırma etkinleştirildiğinde yerleşim geri çağrıları çağıran iş parçacığında kalır ve worker kuyrukları boşaltılmadan önce seçilen sayfalar için tamamlanır

OnCell içinde Abort değerini ayarlamak, engellenen üretici ve tüketicileri uyandırır, sürmekte olan ZIP okuma ve açma işlemlerini sınırlı iç adımlarda durdurur, tüm worker'ların bitmesini bekler ve okuyucuyu yeniden kullanılabilir durumda bırakır

Doğrudan Yazıcı API'si

TXLSDirectWriter sınıfı, satırları doğrudan ZIP dosya paketine yazar ve büyük veri dışa aktarımları oluştururken en az bellek yükünü sağlar

Writer := TXLSDirectWriter.Create;
try
  Writer.BeginFile('large.xlsx');
  Writer.AddSheet('Data');
  Writer.AddRow(1);
  Writer.WriteString(1, 'Quarter');
  Writer.WriteString(2, 'Revenue');
  Writer.AddComment(2, 1, 'Validated source', 'Reviewer');
  Writer.AddImageFromFile(4, 1, 8, 12, 'logo.png',
    xlsDirectImagePng, 'Company logo');
  ChartIndex := Writer.AddChart(9, 1, 18, 16,
    xlsDirectChartColumn, 'Revenue');
  Writer.AddChartSeries(ChartIndex, 'Revenue',
    'Data!$A$2:$A$5', 'Data!$B$2:$B$5');
  Writer.Close;
finally
  Writer.Free;
end;

AddComment, çalışma sayfası nesne modelini yüklemeden yazar üst verisiyle klasik hücre notlarını ve eşleşen VML not şekillerini yazar

AddImage, AddImageFromFile ve AddImageFromStream; iki hücreli çıtalar ile PNG, JPEG, GIF, BMP, EMF ya da WMF yükleri kabul eder; dosya kaynakları, sayfa tamamlandığında doğrudan ZIP girdisine akıtılırken akış kaynakları yalnızca akış başvurusunu ve kaydedilen bayt aralığını tutar

AddImageFromStream OwnsStream=True aldığında yazıcı, çalışma sayfasının yan parçaları kesinleştirildikten sonra o akışı serbest bırakır; aksi hâlde çağıran, konumlandırılabilir akışı bir sonraki AddSheet ya da Close çağrısına kadar canlı tutmak zorundadır

AddChart ve AddChartSeries; formül destekli serilerle sütun, çubuk, çizgi, alan, pasta, halka ya da dağılım ChartML'i üretirken AddChartXml, gelişmiş grafik aileleri ve uzantılar için eksiksiz, çağıranın sağladığı bir grafik parçası ekler

Yorumlar, çizim çıtaları ve grafik tanımlayıcıları yalnızca geçerli çalışma sayfası için tutulur; sheetData kapandıktan sonra yazıcı, çalışma sayfası ilişkilerini, yorumları, VML'i, DrawingML'i, medyayı ve ChartML'i sırayla yazar ve bir sonraki çalışma sayfası başlamadan önce yan kanal durumunu serbest bırakır