Omówienie fasady XLSX (lxHandleX)
lxHandleX to dedykowany moduł fasady dla procesów roboczych skoroszytów Excel 2007+ (.xlsx) i OpenDocument Spreadsheet (.ods). Współistnieje z oryginalną fasadą lxHandle, dzięki czemu starszy kod działa bez zmian:
lxHandle— główna fasada dla formatu Excel 97-2003 BIFF (.xls) oraz eksportu do HTML, RTF, CSV i TSV; cały istniejący kod użytkownika nadal korzysta z tego modułu bez zmianlxHandleX— główna fasada dla formatu Excel 2007+ OOXML (.xlsx), procesów odczytu/zapisu ODS oraz podzbioru wartości i stylów XLSB; udostępnia osobne typy skoroszytów i arkuszy, automatyczne wykrywanie pakietu poprzezOpeniSourceFormat, jawne formaty wyjściowe orazTODSExportOptions
Hierarchia klas
Fasada XLSX udostępnia następujące klasy:
type
TXLSXWorkbook = class // top-level workbook with SaveAs / Open
TXLSXHtmlExportOptions = class // HTML document, style, BOM, and table class options
TODSExportOptions = class // ODS export options for generator, chart, and image output
TXLSXSheets = class // worksheet collection on the workbook
TXLSXFonts = class // workbook-level font palette
TXLSXFont = class // single font descriptor
TXLSXFills = class // workbook-level fill palette
TXLSXFill = class // single fill (pattern + fg/bg color)
TXLSXBorders = class // workbook-level border palette
TXLSXBorder = class // four edges + diagonal border
TXLSXNumberFormats = class // workbook-level custom format codes
TXLSXDefinedNames = class // workbook-level named ranges
TXLSXWorksheet = class // single worksheet with cells and decorations
TXLSXCells = class // cell collection on the worksheet
TXLSXCell = class // single cell (value, formula, *Index style refs)
TXLSXRange = class // rectangular worksheet range wrapper
TXLSXMergedCells = class // merged-range collection
TXLSXHyperlinks = class // hyperlink collection
TXLSXComments = class // cell-comment collection
TXLSXImages = class // image collection (drawings + media)
TXLSXConditionalFormats = class // conditional formatting rules
TXLSXDataValidations = class // data-validation rules
TXLSXTables = class // Excel-style table collection
TXLSXCharts = class // chart collection (anchored or full-page)
TXLSXChart = class // single chart (column / bar / line / pie / scatter / bubble / radar)
TXLSXChartSeries = class // chart series with category, value, and bubble-size ranges
TXLSXTextBox = class // standalone worksheet drawing text box
TXLSXRichText = class // per-run rich-text payload for cells
TXLSXAlignment = class // cell alignment / wrap / indent / rotation
TXLSXExternalLinks = class // external workbook link collection
TXLSXExternalLink = class // single external workbook reference (Target URL + SheetNames)
Klasy te są niezależne od lxHandle.TXLSWorkBook oraz
lxHandle.TXLSWorksheet; aplikacje, które wymagają obu formatów, mogą
używać obu fasad obok siebie:
uses
lxHandle, // XLS / HTML / RTF / CSV workbook (TXLSWorkBook)
lxHandleX; // XLSX workbook (TXLSXWorkbook)
Szybki start
Fasada XLSX zachowuje te same konwencje wywołań co fasada
BIFF — SaveAs / Open na skoroszycie,
Sheets.Add / Sheets[i] na kolekcji arkuszy
oraz Cells.Item[Row, Col].Value na kolekcji komórek; poniższy przykład zapisuje mały skoroszyt, który wykorzystuje każdą obecnie obsługiwaną funkcję:
uses lxHandleX;
var
wb: TXLSXWorkbook;
ws: TXLSXWorksheet;
bold, yellow, box, currency: Integer;
begin
wb := TXLSXWorkbook.Create;
try
bold := wb.Fonts.Add('Calibri', 12, True, False);
yellow := wb.Fills.AddSolid($FFFFFF00);
box := wb.Borders.AddBox(xlsxBorderThin);
currency := wb.NumberFormats.Add('"$"#,##0.00');
ws := wb.Sheets.Add('Demo');
ws.Cells.Item[1, 1].Value := 'Hello';
ws.Cells.Item[1, 1].FontIndex := bold + 1;
ws.Cells.Item[1, 2].Value := 123.45;
ws.Cells.Item[1, 2].NumberFormatIndex := currency + 1;
ws.Cells.Item[2, 1].Value := Now; // tagged as date
ws.Cells.Item[2, 2].Formula := 'SUM(B1:B1)';
ws.Cells.Item[3, 1].FillIndex := yellow + 1; // highlight cell
ws.Cells.Item[3, 2].BorderIndex := box + 1; // boxed cell
ws.ColWidth[1] := 24;
ws.RowHeight[1] := 28;
ws.MergeCells(4, 1, 4, 3);
ws.Range['A8:C10'].Merge(True); // merge across rows
ws.AddHyperlink(5, 1, 'https://www.loslab.com', 'Visit losLab');
ws.AddComment(5, 2, 'Important note', 'Kevin');
ws.AddImageFromFile(6, 1, 'logo.png');
ws.AddConditionalFormat('B1:B10', xlsxCfOpGreaterThan, '100');
ws.AddListValidation('C1:C5', 'Yes,No,Maybe');
wb.DefinedNames.Add('SalesData', 'Demo!$A$1:$B$10');
wb.SaveAs('demo.xlsx');
finally
wb.Free;
end;
end;
Obsługiwane funkcje
- Wartości komórek: liczby, wartości logiczne, ciągi znaków, daty, formuły
- Shared strings table (
xl/sharedStrings.xml) with deduplication on the write path - Palety stylów na poziomie skoroszytu —
Workbook.Fonts,Fills,BordersiNumberFormats— orazFontIndex/FillIndex/BorderIndex/NumberFormatIndexdla poszczególnych komórek; SaveAs emituje rzeczywiste bloki<fonts>/<fills>/<borders>/<numFmts>+<cellXfs>; Open analizuje je z powrotem, dzięki czemu Nazwa/Rozmiar/Pogrubienie/Kursywa/Kolor, wzorce wypełnienia, krawędzie obramowania i niestandardowe formaty liczb zachowują się podczas cyklu zapisu i odczytu - Szerokości poszczególnych kolumn poprzez
Worksheet.ColWidth[Col]oraz wysokości poszczególnych wierszy poprzezWorksheet.RowHeight[Row](blok arkusza<cols>i atrybutyhtw każdym elemencie<row>) - Wbudowany format daty
cellXfpod indeksemXlsxXfIndexDate; wartościTDateTimesą oznaczane automatycznie - Scalone komórki (
<mergeCells>), w tymTXLSXRange.Merge(True)dla scalania w poprzek wierszy w stylu programu Excel - Zakresy arkusza poprzez
Worksheet.Range,RCRange,UsedRange,EntireRoworazEntireColumn; patrz TXLSXRange dla wartości masowych, formuł,SetArrayFormula, indeksów stylów, formatów liczb, obramowań, flag ochrony, autodopasowania, scalania, przesunięcia, zmiany rozmiaru, sortowania wielokluczowegoSort, wbudowanych stylów komórekApplyBuiltinStyle, pomocników kopiowania/przenoszenia, pomocników wstawiania/usuwania całych wierszy/kolumn oraz eksportu wybranego zakresu do HTML - Hiperłącza (
<hyperlinks>) wspierane przez powiązania rels dla każdego arkusza dla zewnętrznych adresów URL - Komentarze do komórek z rysowaniem VML (
xl/commentsN.xml+xl/drawings/vmlDrawingN.vml), dzięki czemu dymki wyświetlają się w programie Excel - Osadzone obrazy (PNG / JPEG / GIF / BMP) poprzez
Worksheet.Images, zapisywane doxl/media/imageN.<ext>oraz powiązań XML rysunku dla każdego arkusza - Samodzielne rysunkowe pola tekstowe poprzez
Worksheet.AddTextBox, zapisywane jako kształty rysunkowe arkusza z treścią tekstową zamiast komentarzy komórek, z bezpośrednim wyszukiwaniem kotwic oraz pomocnikami usuwania zakresu - Zakresy nazwane na poziomie skoroszytu poprzez
Workbook.DefinedNames(o zakresie skoroszytu lub arkusza za pomocąSheetIndex) - Obliczanie formuł poprzez
Workbook.CalculateiWorksheet.Calculate, współdzielące parser i ewaluator formuł XLS dla formuł rozpoczynających się od znaku równości, odwołań do komórek i zakresów, odwołań do komórek z formułami, odwołań między arkuszami, zakresów zdefiniowanych nazw oraz obsługiwanych funkcji tekstowych, daty, dni roboczych, inżynieryjnych/konwersji bazowej, bitowych, statystycznych, agregujących i matematycznych; użyjWorkbook.OnUserFunctionlubWorkbook.OnUserFunctionExdo obsługi niestandardowych lub nieobsługiwanych funkcji - Formatowanie warunkowe dla poszczególnych arkuszy
(
Worksheet.ConditionalFormats) oraz walidacja danych (Worksheet.DataValidations), w tym skrót do listy rozwijanejAddListValidation(Range, Items) - Row / column outline groups (
RowOutlineLevel,ColOutlineLevel), hidden state (RowHidden,ColHidden), and collapsed group state (RowCollapsed,ColCollapsed) - Zablokowane okienka poprzez
Worksheet.FreezePanes(Row, Col) - Ustawienia strony — sześć właściwości marginesów, rozmiar papieru, orientacja,
skala strony, dopasowanie do szerokości / dopasowanie do wysokości oraz
HeaderText/FooterText; nazwane stałexlsxPaper*, takie jakxlsxPaperLetter,xlsxPaperA4,xlsxPaperA3ixlsxPaperLegal, mogą być przypisane doPaperSize - Autofiltr (
Worksheet.SetAutoFilter) - Tabele w stylu Excela (TXLSXTable) z informacjami o stylu i kolumnami tabeli
Interfejsy API podkolekcji fasady
Klasy kolekcji fasady zarządzają formatowaniem warunkowym, walidacją danych, nazwanymi zakresami, obrazami i tabelami; oto główne składowe każdej kolekcji:
- TXLSXConditionalFormats:
Eksponuje reguły formatowania warunkowego
Właściwości:
CountMetody:AddAboveAverage,AddColorScale2,AddColorScale3,AddDataBar,AddExisting,AddExpression,AddIconSet,AddSimpleRule,AddTextRule,AddTop10,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDataValidations:
Eksponuje walidacje danych
Właściwości:
CountMetody:AddExisting,AddList,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDefinedNames:
Eksponuje zdefiniowane nazwy (nazwane zakresy)
Właściwości:
CountMetody:DeleteByName,FindByName,IndexOfName - TXLSXImages:
Eksponuje osadzone obrazy
Właściwości:
CountMetody:DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXTables:
Eksponuje tabele programu Excel
Właściwości:
CountMetody:AddExisting,DeleteByName,FindByName,IndexOfName - TXLSConnections:
Eksponuje zewnętrzne połączenia danych skoroszytu przez
Workbook.ConnectionsWłaściwości:CountMetody:Add,AddExisting,FindById,FindByName,NextId,Validate - TXLSQueryTables:
Eksponuje definicje wyników zapytań arkusza przez
Worksheet.QueryTablesWłaściwości:CountMetody:Add,AddExisting,FindByName,FindByResultTableName,Validate
Obsługiwane funkcje
- Właściwości dokumentu (
Workbook.Title,Author,Subject,Keywords,Description,LastModifiedBy,Companyitp.) zapisywane dodocProps/core.xml+docProps/app.xml - Ochrona hasłem arkusza / skoroszytu (klasyczny 16-bitowy hasz)
poprzez
Worksheet.Protect/Workbook.ProtectWorkbook; kompatybilny z programem Excel zapis chroniony hasłem AES za pomocąSaveAsEncrypted, z użyciem akceleracji AES-NI, gdy jest dostępna, lub programowej wersji zapasowej w przeciwnym razie;OpenEncryptednadal zgłasza błąd dla pakietów zaszyfrowanych do czasu wdrożenia obsługi deszyfrowania - Zachowanie projektu VBA poprzez
Workbook.LoadVbaProjectFromFile/VbaProject; bajty są przesyłane w obie strony bez zmian; prawidłowe zawartościvbaProject.binmogą być również sprawdzane za pomocąWorkbook.ParsedVBAProject - Wykresy — kolumnowe / słupkowe / liniowe / kołowe / obszarowe / pierścieniowe poprzez
TXLSXChart, zakotwiczone
w arkuszu (
Worksheet.AddChart) lub na pełnej stronie w dedykowanym arkuszu wykresu poprzezWorkbook.AddChartSheet(Name, Type, Title) - Komórki z tekstem sformatowanym poprzez TXLSXRichText z formatowaniem czcionki dla poszczególnych przebiegów; zachowywane podczas zapisu i odczytu przez tabelę ciągów współdzielonych
- Wewnętrzne kotwice hiperłączy poprzez
Worksheet.AddHyperlinkToCell(Row, Col, "Sheet2!A1")(nie jest wymagane powiązanie rels) - Interfejs API kopiowania / przenoszenia / czyszczenia zakresu komórek w arkuszu
(
CopyRange,CopyRangeTo,MoveRange,ClearRange) - Wyrównanie komórek poprzez
TXLSXAlignment +
AlignmentIndexdla pojedynczej komórki - Kolor karty arkusza poprzez
Worksheet.TabColor/TabColorIsAuto - Tryb widoku arkusza poprzez
Worksheet.View, w tym widok normalny, podgląd podziału stron oraz widok układu strony - Strumieniowa ścieżka SaveAs (
Workbook.StreamingWrite := True), która buduje i zapisuje każdy arkusz bez trzymania innych w pamięci; akumulator XML dla poszczególnych wierszy korzysta zTXLSWideStringBuilder, dzięki czemu pętla komórek pozostaje liniowa - Round-trip
Opendla wszystkiego powyżej, z wyjątkiem zaszyfrowanych pakietów XLSX i identyfikacji arkusza chart-sheet, które wracają do udokumentowanego zachowania częściowego - Eksport i import oparty na strumieniach:
SaveAs(Stream),Open(Stream)dla użycia w pamięci lub w polach typu BLOB - Odczyt/zapis OpenDocument Spreadsheet:
Workbook.OpenODSoraz ogólna metodaWorkbook.Openmogą ładować pakiety.ods, podczas gdyWorkbook.SaveAsODSiSaveAs(..., xlsxOpenDocumentSpreadsheet)bezpośrednio zapisują pliki ODS; zakres obsługi formatu obejmuje wartości, formuły, style, sformatowany tekst, wymiary wierszy/kolumn, scalenia, hiperłącza, obrazy, wykresy, nazwane zakresy, AutoFiltr, formatowanie warunkowe, walidację danych, blokowanie okien, ustawienia strony, nagłówki/stopki, zakresy drukowania, podziały stron, grupy konspektu, kolor karty i widoczność arkuszy we wszystkich obsługiwanych kierunkach - Opcje eksportu ODS: przekaż
TODSExportOptionsdoSaveAsODS, aby zastąpić ciąg znaków generatora dokumentu lub wyciszyć części wykresów i obrazów w celu uzyskania lżejszego pakietu - Import tekstu rozdzielanego:
Workbook.OpenCSV(FileName)orazWorkbook.OpenCSV(Stream)importują dane CSV lub TSV z wykrywaniem separatora, wykrywaniem kodowania BOM, cudzysłowami w stylu RFC 4180 i opcjonalnym wnioskowaniem typów wartości; metodaOpen(FileName)automatycznie kieruje pliki.csvi.tsvdo importera - Skanowanie metadanych skoroszytu:
Workbook.GetSheetNames(FileName, List)iWorkbook.GetSheetNames(Stream, List)odczytują uporządkowane nazwy arkuszy zxl/workbook.xmlbez ładowania plików XML arkusza - Ochrona komórek:
TXLSXCell.LockediFormulaHidden— kontroluje, które komórki są edytowalne lub których formuły są widoczne, gdy arkusz jest chroniony - Autodopasowanie szerokości kolumn i wysokości wierszy na podstawie zawartości komórek:
Worksheet.AutoFitColumn,AutoFitColumns,AutoFitRow,AutoFitRows - Row / column insert and delete with full cascade:
InsertRows,DeleteRows,InsertCols,DeleteCols. Skutki uboczne propagują się przez komórki, scalone zakresy, hiperłącza, komentarze, zamrożone okienka, odwołania w postaci ciągów zakresów, tabele, formuły komórek, formuły formatowania warunkowego / sprawdzania poprawności danych, wewnętrzne cele hiperłączy, odwołania ustawień wydruku, ręczne podziały stron, kryteria kolumn autofiltra, zakresy serii wykresów, nazwy zdefiniowane, kotwice obrazów oraz kotwice wykresów - Rozszerzone ustawienia strony:
PrintArea,PrintTitleRows,PrintTitleCols,PrintGridlines,PrintHeadings,BlackAndWhite,Draft,PrintNotes,PrintOverThenDown - Dostęp do nieprzezroczystego payloadu sterownika drukarki przez
PrinterDriverData,HasPrinterDriverDataiClearPrinterDriverData; tablice bajtów i kopie arkuszy mają niezależną własność, payload jest ograniczony do 1 MiB, a czyszczenie usuwa powiązanie arkusza i binarną część pakietu bez podmieniania typowanych pól ustawień strony; przy ładowaniu wiązany jest wyłącznie dokładny identyfikator relacjipageSetupz wymaganym typem relacji i istniejącym celem, a brakujące, źle otypowane lub wiszące odwołania emitująxlsDiagnosticPrinterSettingsRelationshipInvalidbez pożyczania innej binarnej części - Kalibracja renderowania na poziomie skoroszytu przez
RenderCalibration,CaptureRenderCalibrationiResetRenderCalibration, z walidowanym przypisaniem całego rekordu i niezależnymi migawkami operacji dla szerokości, wysokości, interlinii, marginesów komórek, skalowania ekranu i DPI pomiaru - Pomiar geometrii i czcionek na poziomie operacji przez
CreateRenderGeometry, z niemutowalną kalibracją i tożsamością generacji skoroszytu, kompletnymi kluczami cache świadomymi czcionek i zawijania, ograniczonym lokalnym cache oraz współdzielonymi konwersjami pikseli, punktów, szerokości kolumn, MDW i użytecznej szerokości komórki - AutoFit pobiera jedną migawkę geometrii skoroszytu na operację i mierzy czcionki widocznych komórek oraz zawijany tekst ze skalibrowaną interlinią i marginesami; paginacja pobiera osobną migawkę na każdą budowę, do czasu kolejnej budowy pozostawia istniejące strony logiczne bez zmian i nigdy nie zapisuje wymiarów arkusza
- Widoczność arkusza:
Worksheet.Visibility(xlsxSheetVisible/xlsxSheetHidden/xlsxSheetVeryHidden) orazIsSelected - Ręczne podziały stron:
AddRowBreak,AddColBreak, wyszukiwanie indeksu oraz pomocnicy usuwania zakresu - Kryteria kolumn autofiltru:
Worksheet.AddAutoFilterColumnz pojedynczymi lub dwukryteriowymi regułami filtrowania AND/OR, orazWorksheet.AutoFilterColumns.FindByColIdiDeleteByColIddo bezpośredniego wyszukiwania i usuwania kryteriów (TXLSXAutoFilterColumn) - Baza dat skoroszytu:
Workbook.Date1904przełącza między epoką dat 1900 (domyślna dla systemu Windows) a 1904 (Mac) - Obramowania ukośne:
TXLSXBorder.DiagonalUpiDiagonalDownwłączają linie ukośne; krawędźDiagonalniesie styl i kolor - Rozszerzone właściwości czcionki:
TXLSXFont.VertAlign(indeks górny / indeks dolny),OutlineFont,Shadow,Family,CharSet - Metadane zakresów nazwanych:
TXLSXDefinedName.HiddenorazComment - Opcje widoku arkusza:
Worksheet.Zoom,DisplayGridLines,DisplayZeros,DisplayRightToLeft,StandardWidth,StandardHeight - Starsza paleta kolorów indeksowanych OOXML:
Workbook.IndexedColor[0..63]zResetIndexedColors - Linki do zewnętrznych skoroszytów:
Workbook.ExternalLinks/ TXLSXExternalLink — pełny zapis i odczyt adresu URL oraz metadanych nazw arkuszy - Zewnętrzne połączenia danych i wyniki zapytań:
Workbook.Connections/Worksheet.QueryTables— typowane odświeżanie oraz wiązania poświadczeń, poleceń, webu, tekstu, parametrów, pól, tabel i nazw zdefiniowanych z round-tripem bezpiecznym dla rozszerzeń - Obsługa kolorów motywu w
TXLSXFont,TXLSXFilliTXLSXBorderEdge: właściwościColorTheme/ColorIndex/TintAndShadez priorytetyzacją kolejności (motyw > indeksowane > RGB) - Konwersja do BIFF8 przez przeciążenia plikowe i strumieniowe
SaveXLSXWorkbookAsXLS, z deterministycznym planem palety 56 kolorów, zachowaniem slotów indeksowanych już używanych przez style skoroszytu, ważoną kwantyzacją OKLab, gdy kolory bezpośrednie przekraczają dostępną liczbę slotów, oszczędnym przejściem po wczytanych komórkach i odrzuceniem w preflight wierszy lub kolumn poza siatką XLS; typowane pola wydruku i nieprzezroczyste dane drukarki są konwertowane niezależnie, granice BIFF8 są sprawdzane przed zapisem strumienia docelowego, pola standardowe mają priorytet nad duplikatami prywatnych wartości domyślnych, a flagaUsePrinterDefaultsznana tylko z OOXML nie jest syntetyzowana do Classic XLS - Eksport do CSV:
Workbook.SaveAsCSV— 4 przeciążenia (FileName lub Stream × aktywny arkusz / jawny SheetIndex + Delimiter), UTF-8 z BOM, znakowanie RFC 4180 - Eksport HTML:
Workbook.SaveAsHTMLiTXLSXRange.SaveAsHTMLzapisują tabele HTML5 dla całego arkusza skoroszytu lub tylko dla zaznaczonego prostokąta; przeciążenia opcji akceptująTXLSXHtmlExportOptionsdla wyjściowego pełnego dokumentu, emisji stylów, emisji BOM i nazewnictwa klas tabel - Eksport do RTF:
Workbook.SaveAsRTF— 4 przeciążenia, tabela RTF 1.6 z szerokościami kolumn, formatowaniem czcionki dla pojedynczej komórki oraz pełnym standardem Unicode BMP poprzez 16-bitowe znaki ucieczki ze znakiem\uN?
Shared infrastructure
Obie fasady dzielą wspólny zestaw modułów pomocniczych niższego poziomu, co oznacza, że deskryptory stylów, tablice mieszające, drzewa AVL, wejście/wyjście ZIP i XML, konwersje RGB do HLS oraz kreatory ciągów znaków są napisane raz i używane przez obie ścieżki; wspólne narzędzia pomocnicze obejmują:
lxStyleXf,lxStyleFont,lxStyleColor,lxStyleFill,lxStyleBorder— nowoczesne deskryptory stylówlxRgb— konwersja kolorów RGB / HLSlxHashTable,lxKeyList,lxAvlTree,lxCols,lxRows— kontenery deduplikujące i bloki konstrukcyjne sterty komórek oparte na drzewach AVLlxXmlReader,lxXmlWriter,lxZipArchive— warstwa transportowa OOXMLlxStrBuilder,lxCacheStream,lxWStream,lxZlibStream— pomocnicy montowania strumieni i łańcuchów znaków