HotXLS belgeleri

Free Pascal ve Lazarus desteği

HotXLS, Windows Win32 ve Win64 üzerinde Free Pascal 3.2.2 ve Lazarus/LCL desteği sunar; buna XLS/XLSX çalışma kitabı API'leri, formüller, biçimlendirme, doğrudan akış, TDataToXLS ve TGridToXLS dışa aktarma bileşenleri ve işleme yardımcıları dahildir

Yerel Linux ve macOS çalışma kitabı çekirdeği

Kapsamlı dizin API'leri, açık yerel depolama sahipliği, zaman damgaları ve kanonik Classic tanımlayıcı anahtarları için bileşik dosya depolaması konusuna bakın

İsteğe bağlı LX_PORTABLE_CORE profili, Linux ve macOS'ta LCL olmadan TXLSWorkbook ve TXLSXWorkbook'ı açığa çıkarır. Yerel Linux x64 ve macOS ARM64, Free Pascal 3.3.1 ile derlenip çalıştırıldı; kaynak sürüm koruması en az 3.2.2 gerektirir ancak bu taban, her yerel derleyici ve hedef kombinasyonunun doğrulandığı anlamına gelmez

HotXLS ünitelerinden önce cthreads ve cwstring koyun, ünite ve include yollarına Lib'i ekleyin ve tüm derleme için LX_PORTABLE_CORE tanımlayın. Yerel bir konsol uygulaması Interfaces veya bir LCL widgetset gerektirmez

Unicode dosya sistemi yollarıyla çalışırken uygulama ortamında kurulu bir UTF-8 yerel ayarı seçin. Geçersiz veya UTF-8 olmayan bir yerel ayar, yerel RTL dosya adı dönüşümünü kayıplı yapabilir; doğrulama yardımcısı, yerel ayarı değiştirmek veya bir kod sayfası tahmin etmek yerine o ortamı açıkça reddeder

program NativeWorkbookExample;
{$mode delphiunicode}
uses
  cthreads, cwstring, SysUtils, lxHandleX;
var
  Workbook: TXLSXWorkbook;
begin
  Workbook:= TXLSXWorkbook.Create;
  try
    Workbook.Sheets.Add('Data').Cells[1, 1].Value:= 5;
    Workbook.Sheets[1].Cells[1, 2].Formula:= 'A1*2';
    if Workbook.Recalculate<> 1 then
      raise Exception.Create('Workbook calculation failed');
    if Workbook.SaveAs('native.xlsx')<> 1 then
      raise Exception.Create('Workbook save failed');
  finally
    Workbook.Free;
  end;
end.
AlanYerel çekirdek sözleşmesi
Çalışma kitabı dosyalarıClassic BIFF8 XLS, XLSX, desteklenen genişletilmiş XLSB alt kümesi ve desteklenen ODS alt kümesini genel çalışma kitabı API'leri üzerinden oluşturun, açın, düzenleyin, hesaplayın ve kaydedin; mevcut dönüşüm denetimleri ve biçim sınırlarıyla. Açıkça bildirilmiş CP1252 ve CP932 kodlamalı Classic BIFF2 kayıtları da içe aktarma ve Unicode BIFF8 dışa aktarma üzerinden doğrulandı
Unicode ve adlarÇalışma kitabı metni UTF-16 semantiğini korur ve dosya sistemi yolları yerel sınırlarda UTF-8 kullanır. Tanımlı ad kimliği, sabitlenmiş Unicode 16 kanonik normalleştirmesini ve BMP tam büyük/küçük harf katlamasını kullanır; simgeleri, aksanları, Türkçe ayrımları ve astral harf kimliğini konak yerel ayarından bağımsız korur; nitelemeli formüller tam sayfa kapsamlarını korur. Sıradan çalışma sayfası metin sıralaması hâlâ yerel RTL yerel ayar karşılaştırmasını kullanır
AltyapıYerel critical section'lar, tam genişlikli iş parçacığı tanımlayıcıları, gerçek işçi thread'ler, kayıtlı özel geçici dosyalar, atomik kardeş-dosya değiştirmesi ve işletim sistemi rastgele baytları, Windows öykünmesi olmadan kullanılır
Sıkıştırma ve kriptografiPaketle gelen Pascal ZIP/sıkıştırma ve AES kullanılabilir kalır. Classic RC4 ve RC4 CryptoAPI XLS dosyaları, işletim sistemi rastgele baytları kullanılarak yerel olarak okunup yazılabilir. Şifreli OOXML okumaları saf bileşik-dosya okuyucusunu kullanır; şifreli OOXML bileşik dosya yazmak Windows gerektirir ve yerel Unix'te açık bir platform istisnası fırlatır
Formül REGEX işlevleriSabitlenmiş statik PCRE2 UTF-16 arka ucu, yerel hedefte C derleyicisiyle derlenir. Formül motorunu içeren uygulamaları derlemeden önce sh Lib/thirdparty/build-pcre2-unix.sh çalıştırın; Linux x64 ve macOS ARM64 statik hedefleri sağlanır
Windows servisleriPano erişimi, Windows COM etkinleştirmesi, yerleşik ADO/WinHTTP sorgu sağlayıcıları, GDI geometri yakalama, HTML arka plan resim kod çözme ve eski PDF dışa aktarma, açık sınırlarında EXLSPlatformUnsupported fırlatır. Özel sorgu sağlayıcıları ve metin sağlayıcıları kullanılabilir kalır
Eski bileşenlerClassic çalışma kitabı modeli ve BIFF okuyucu/yazıcı yerel çekirdekte kullanılabilir. LCL çalışma zamanı paketi, dataset/grid dışa aktarma bileşenleri ve görsel denetimler Windows/LCL bileşeni olarak kalır. Classic pano yöntemleri, HTML dışa aktarma ve eski PDF dışa aktarma yerel Unix'te açık platform istisnaları fırlatır
Bayt yönelimli metin formülleriWindows aktif ANSI/DBCS kod sayfası gerektiren işlevler yerel Unix'te açık bir desteklenmeyen-formül sonucu döndürür (#NAME?); örtük yerel ayar veya kod sayfası ikamesi seçilmez

Açma ve kaydetme yöntemleri normal sonuç kodu ve tanılama sözleşmelerini korur. Doğrudan platform-sınır çağrıları EXLSPlatformUnsupported fırlatabilir; paylaşılan uygulama kodundan Windows'a özel bir servis çağırırken bu istisnayı işleyin

Yinelenabilir yerel doğrulama

Doğrulama yardımcısını, kurulu bir Free Pascal araç zinciri, Python 3 ve yerel bir C derleyicisiyle yerel konakta çalıştırın. Konak dosya sisteminde kaynak çıkartma dışında yeni veya boş bir çıktı dizini seçin

python3 Tests/Lazarus/run_native_core.py --fpc /path/to/fpc --output /guest-local/hotxls-validation
python3 Tests/Lazarus/run_native_core.py --fpc /path/to/fpc --config /path/to/fpc.cfg --output /guest-local/hotxls-validation-2

Yardımcı, kaynak girdilerini kopyalar ve özetler, FPC'nin büyük/küçük harf duyarlı dosya adı araması için özel derleme kopyasında Pascal ünite dosya adlarını normalleştirir, PCRE2'yi yerel olarak derler ve çekirdek, AES, sıkıştırma, REGEX, genel çalışma kitabı ve bütünleştirme tanıklarını çalıştırır. Kaynak bildirimlerini, derleyici günlüklerini, artefaktları ve başarısızlıkları; çıkartmayı, araç kurmayı veya derleyici yapılandırmasını düzenlemeyi değiştirmeden saklar. macOS ARM64 derlemeleri açıkça macOS 11 ve sonrasını hedefler

Bütünleştirme tanıkları Unicode yolları, Excel'in yazdığı XLSB fikstürlerini, formül önbelleklerini ve yeniden hesaplamayı, tekrarlanan açmaları, seyrek ODS notlarını ve korumayı, denetimli dönüşüm reddini, caller hedeflerini koruyan iptali, değişmez kapsamlı ad aramasını, gerçek işçi hata denetimini ve kriptografik rastgele baytları içerir

Yerel Classic XLS sözleşmeleri

Classic TXLSWorkbook için lxHandle, TXLSXWorkbook için lxHandleX kullanın. Classic Recalculate hata sayısı döndürür, dolayısıyla sıfır başarı demektir; Calculate yöntemi bir formül sonucu döndürür. Classic hücre Formula atamaları başta = gerektirir. Çalışma kitabı açma ve kaydetme yöntemleri, yerleşik başarı sonucu olan 1'i korur

Yerel Classic depolama uygulaması gerçek bileşik dosya hiyerarşisi ve akış kimlikleri kullanır; iç içe kapsamları, MiniFAT verisini ve genişletilmiş DIFAT zincirlerini korur. Akış yükleri somutlaştırılır ve yazar, yaymadan önce desteklenen işaretli 32-bit tampon/sektör sınırlarını aşan toplam çıktıyı reddeder; bu, çok gigabaytlık bir akış depolama uygulaması değildir

Yerel bileşik depolama doğrudan akış işlemleri, numaralandırma, meta veri ve kopyalama işlemleri sağlar. İşlem geri alması, bölge kilitleme, taşıma ve desteklenmeyen dışlama modları açık depolama hataları döndürür. Windows COM'u, panoyu veya GDI servislerini öykünmez

Classic yerel dosya kaydetmeleri, kayıtlı bir kardeş dosyayı atomik değiştirmeden önce serileştirir. Caller akış kaydetmeleri, özgün konumda kopyalamadan önce eksiksiz bileşik dosyayı hazırlar; önekleri ve iptal hatalarını commit'ten önce korur. Son ilerleme bildirimi iptal edilemez olarak kalır. Doğrudan bileşik depolama yardımcı yazımları, genel çalışma kitabı kaydetme işlemi yerine kendi sıradan doğrudan-yazım sözleşmelerini izler

Sıradan özet ve belge-özet özellikleri, Unicode metin ve UTC FILETIME zaman damgalı sınırlı standart OLE özellik kümelerini kullanır. Bu özellik akışları, Classic çalışma kitabı verisi şifrelendiğinde düz metin olarak kalır ve RC4 CryptoAPI başlığı bu tercihi açıkça kaydeder. Tanımlı adlar, özgün yazımlarını ve açık çalışma sayfası kapsamlarını korurken XLSX cephesinin kullandığı sabitlenmiş kanonik tanımlayıcı anahtarları paylaşır. Kodlanmış PNG/JPEG çizim verisi model için kullanılabilir kalır; yerel bitmap/metafile dönüşümü ayrı desteklenen bir işleyici gerektirir ve aksi hâlde EXLSPlatformUnsupported fırlatır

Tests/Lazarus/HotXLSNativeClassicWorkbookSmoke.lpr'ı aynı yerel çekirdek seçenekleriyle derleyin, ardından Tests/Fixtures/classic-native/native-classic.xls, atılabilir bir konak-yerel çıktı yolu ve Tests/Fixtures/classic-native/native-classic-encrypted.xls geçin. Kontroller Excel'in yazdığı önbellekleri, yeniden hesaplamayı, tam Unicode adlarını, düz ve şifreli gidiş dönüşleri, bağımsız çözülmüş özellik zaman damgalarını, tekrarlanan açmaları, 16 MB'den fazla SST verisini ve caller çıktı korunumunu kapsar

Eski BIFF bayt kodlaması

TXLSWorkbook.SetCodePage, SaveAs(..., xlExcel5)'in kullandığı açık bayt kodlamasını seçer ve varsayılan CP1252'dir; kullanılabilir sıfırdan-farklı CODEPAGE kaydı taşıyan bir BIFF2–BIFF5 dosyasını içe aktarmak da sonraki eski kaydetmeler için o sayfayı seçer

Eski hücre etiketleri, formül metin sabitleri ve diziler, önbellekli formül dizeleri, tanımlı adlar, çalışma sayfası adları ve referansları, yazı tipi adları, sayı biçimleri, stil adları, üst ve alt bilgiler ile sıradan açıklama metni; işletim sistemi yerel ayarı veya UTF-8 yerine bildirilen o sayfayı kullanır

Kayıt uzunlukları ve çalışma sayfası akış ofsetleri kodlanmış baytları sayar; mevcut 255 baytlık eski etiket ve formül-literal sınırları yalnızca tam karakter sınırında kırpılır, böylece bir CP932 çift baytlı karakter asla ikiye bölünmez; tek baytlık uzunluklu adlar ve meta veri, geçersiz bir uzunluk yaymak yerine temsil edilebilir uzunluklarından daha uzun kodlanmış metni reddeder

Seçilen kod sayfasından gidiş dönüş yapamayan metin, sessizce bir değiştirme veya en-uymayan karaktere dönüşmeden önce EConvertError fırlatır; belge metnini temsil eden bir sayfa seçin veya Unicode dizeler için BIFF8 olarak kaydedin

CONTINUE kayıtlarına yayılan formül-önbelleği dizeleri, kod çözmekten önce bayt olarak birleştirilir; böylece bir kayıt sınırı, önbellek değerini bozmadan bir çift baytlı karakteri ikiye bölebilir

Seçilen sayfayı değiştirmek, türlü eski formül ve tanımlı ad baytlarını Unicode modellerinden yeniden kurar; BIFF8 kaydetmeleri Unicode kullanmaya devam eder ve disk üzerindeki CODEPAGE değerleri 1200 olarak kalır

İçe aktarılmış BIFF5 grafik kayıtları, türlü seri ve ekli başlık incelemesi için özgün kod sayfalarını korur; çalışma kitabı kod sayfası düzenlemesinden veya grafik kopyasından sonra bile; farklı bir sayfaya kaydetmek, korunan baytları yeni bildirim altında yeniden yorumlamak yerine desteklenen SeriesText'i, düz önbellekli etiketleri ve formül dizelerini, üst ve alt bilgileri ile güncel-çalışma kitabı harici-sayfa adlarını açıkça yeniden kodlar

Devam eden grafik metni, modellenmemiş eski harici-sayfa kodlamaları ve opak eski bayt-metin kayıtları EConvertError ile bir kod sayfası göçünü reddeder; gösterilemeyen desteklenen metin de reddedilir ve genel çalışma kitabı kaydetmesi commit'ten önce caller hedefini korur; bu metin sözleşmesi eksiksiz yerel grafik görünüm dönüşümü vaat etmez

BIFF5 özel stil adları tek baytlık kodlanmış uzunluğun hemen ardından başlarken BIFF5 SeriesText, Unicode bayrağı olmadan bir tanımlayıcı ve tek baytlık kodlanmış uzunluk taşır; BIFF8 SeriesText Unicode bayrağını ekler ve desteklenen grafik metnini dönüştürmek o kaydı ve grafik BOF sürümünü birlikte günceller

Boş olmayan BIFF5 grafik üst ve alt bilgileri 255 baytlık azami ile tek baytlık kodlanmış uzunluk kullanır; önbellekli LABEL ve STRING kayıtları iki baytlık uzunluk kullanırken BIFF8 üst ve alt bilgileri iki baytlık UTF-16 uzunluk artı Unicode bayrağını kullanır; göç, her kaydın gerçek düzenini denetler ve eklemadan önce aşırı büyük eski üst veya alt bilgiyi ERangeError ile reddeder

HotXLS eski baytları, bildirilen sayfalarıyla Windows, Linux ve macOS üzerinde yorumlar; kurulu Excel 16.0 build 20430 bağımsız olarak bir alıcı sınırlaması gösterdi: yerel bir dosyanın yalnızca CODEPAGE kaydı CP1252 veya CP932'ye değiştirildikten sonra bile eski baytları kendi yerel Windows CP936'sıyla yorumladı; bu nedenle doğru bildirilen baytlar, o alıcı yapılandırmasında eşleşen metni garantilemez

BIFF5'i farklı yerel ayar yapılandırmalarına dağıtırken belgenin gerçek kodlama bildirimini koruyun ve alan uygulamayı sınayın; Unicode BIFF8 bu belirli eski-bayt birlikte çalışabilirlik sınırından kaçınır

Bu bayt-kodlama düzeltmesi mevcut BIFF5 sıradan-açıklama kayıt boyutu sınırını korur; eski kayda açıklama yazarı, zengin metin biçimlendirmesi veya şekil geometrisi alanları eklemez

VBA modül kaynak düzenlemesi, projenin bildirilen bayt kod sayfasını kullanır ve kaynak ofsetinden önceki ikili öneki — gömülü null baytlar dahil — korur; bu, saklanan kaynak metnini değiştirir ve makroları çalıştırmaz

fHighByte = 0 ile BIFF8 sıkıştırılmış Unicode, her baytı doğrudan U+0000 ile U+00FF arası bir UTF-16 kod ünitesine eşler; aksi hâlde BIFF8 bir dosyada standart-olmayan bir CODEPAGE kaydı görünse bile bu CP1252, UTF-8 veya dosyanın eski kod sayfası değildir

Yerel metin formülleri UTF-16 uzunlukları ve konumlarını — surrogate çifti kod üniteleri dahil — korur; Unicode LOWER, UPPER, SEARCH, TEXTBEFORE/TEXTAFTER büyük/küçük harf duyarsız ayırıcıları, veritabanı alan başlıkları, büyük/küçük harf duyarsız ölçütler ve dinamik metin anahtarları, konak C yerel ayarının yalnızca-ASCII büyük/küçük harf işlevleri yerine yerel derleyicinin Unicode karakter verisini kullanırken sıradan çalışma sayfası sıralaması mevcut yerel ayar karşılaştırmasını korur

Yerel LET/LAMBDA yerel ad eşleşmesi ve yerel dizi depolama sınıflandırması aynı Unicode farkında büyük/küçük harf işlemeyi kullanır; böylece harf karşıtları doğru yakalanan bağı çözer ve dizi şeklini korur; bu, sabitlenmiş genel tanımlı ad kimliği sözleşmesini değiştirmez

Classic büyük/küçük harf duyarsız FindText ve ReplaceText, yerel FPC'de literal ve Excel joker aramaları için Unicode karakter eşleşmesini korur; MatchCase büyük/küçük harfi hâlâ ayırır, literal değiştirme tümünü-değiştir davranışını korur, joker değiştirme mevcut en-soldaki-span davranışını korur ve formül hücreleri hariç tutulmaya devam eder

Tests/Lazarus/HotXLSNativeLegacyEncodingSmoke.lpr'ı yerel çekirdek seçenekleriyle derleyin ve atılabilir bir çıktı dizini ardından Tests/Fixtures/legacy-encoding/native-biff5-cp936-chart.xls geçin; tanık, bildirilen CP1252, CP932 ve CP936 baytlarını bağımsız denetler; her çalışma sayfası ofsetini, kod sayfası değişikliklerini, çift baytlı devam sınırlarını, sıkıştırılmış BIFF8 içe aktarmayı, formül hesaplamayı, yerel yazımlı grafik metnini ve başarısız-kaydetme hedef korunumunu kapsar

Tam yükleyici

Tam yükleyici Lazarus'u algılar ve RAD Studio olmadan kurulumu destekler. Çalışma zamanı paketini, uyumluluk birimlerini ve derleme betiklerini kurmak için IDE Entegrasyonu sayfasında Lazarus / Free Pascal seçeneğini işaretleyin; Lazarus algılanan tek IDE olduğunda bu seçenek varsayılan olarak işaretlidir

Kurulum sonrası derleme sayfasında, Win32 veya Win64 için Free Pascal çalışma zamanı paketini seçin. Derleyicisi ile RTL, LCL ve LazUtils birimleri algılandığında hedef kullanılabilir olur; hedef kullanılamadığında paket kaynaklarını yine kurabilir ve daha sonra derleyebilirsiniz

Paket yalnızca çalışma zamanı bileşenlerinden oluşur ve Lazarus'ta bir proje bağımlılığı olarak eklenir. Yükleyici, VCL demolarını Free Pascal ile derlemez

Derleme ve test

Lib/FPC/HotXLSLaz.lpk paketini Lazarus'ta açıp çalışma zamanı paketini derleyin veya şu komutları HotXLS dizininden çalıştırın

build-FPC-Lib.cmd Win64
Tests\Lazarus\Run-HotXLSLazarusSmoke.cmd Win64
build-FPC-Lib.cmd Win32
Tests\Lazarus\Run-HotXLSLazarusSmoke.cmd Win32

Bir kurulum seçmek için LAZARUS_DIR değerini ayarlayın; gerektiğinde FPC_EXE ve LAZBUILD_EXE, derleyiciyi ve paket derleyicisini açıkça seçebilir

Seçilen kurulum, hedef mimari için FPC ve derlenmiş LCL/LazUtils birimlerini içermelidir; çıktılar ve paket-derleyici yapılandırması ayrı mimari dizinlerinde tutulur

Uygulama kurulumu

Örnekleme arama yoluna Lib ve Lib/FPC birimlerini, include arama yoluna Lib'i ekleyin veya çalışma zamanı paketini bir Lazarus projesi bağımlılığı olarak ekleyin

Uygulamanın uses listesinde HotXLS birimlerinden önce Interfaces öğesini koyun; konsol uygulamaları dahil. Bu, RTL/LCL sınırlarında LCL widgetset'ini ve UTF-8 dönüşümünü başlatır

program WorkbookExample;
{$mode delphiunicode}
uses
  Interfaces, SysUtils, lxHandleX;
var
  Workbook: TXLSXWorkbook;
begin
  Workbook:= TXLSXWorkbook.Create;
  try
    Workbook.AddSheet('Data');
    Workbook.Sheets[1].Cells[1, 1].Value:= 'Hello';
    if Workbook.SaveAs('example.xlsx')<> 1 then
      raise Exception.Create('Workbook save failed');
  finally
    Workbook.Free;
  end;
end.

HotXLS kaynak birimleri dahili olarak Delphi Unicode semantiğini seçer; böylece dizeler, karakterler ve formül metni UTF-16 davranışını korur. Uygulama kodu istediği Pascal modunu kullanabilir

Uyumluluk ayrıntıları