Visão geral do XLSX Facade (lxHandleX)
lxHandleX é a unit facade dedicada aos fluxos de trabalho de livros do Excel 2007+ (.xlsx) e OpenDocument Spreadsheet (.ods). Coexiste com a facade original lxHandle, para que o código legado continue a funcionar sem qualquer alteração:
lxHandle— facade principal para o formato BIFF do Excel 97-2003 (.xls) e para exportações HTML, RTF, CSV e TSV. Todo o código de utilizador existente continua a usar esta unit sem alteraçõeslxHandleX— facade principal para o formato OOXML do Excel 2007+ (.xlsx) e para fluxos de leitura/gravação ODS. Fornece os seus próprios tipos de livro e de folha de cálculo, para que o comportamento específico do XLSX não seja adaptado por cima do caminho de código BIFF, e expõe importação e exportação de ODS, deteção automática de ODS através deOpen,SourceFormateTODSExportOptions
Hierarquia de classes
A facade XLSX expõe as seguintes classes:
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
TXLSXStructuralEditRegistry = class // ordered application participants for row and column reference updates
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 or combination chart with primary, secondary, date, value, and series axes
TXLSXChartPlotGroup = class // ordered chart-family group with its own series and axis pair
TXLSXChartSeries = class // chart series with formula ranges and typed literal caches
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)
TXLSConnections = class // external data connection collection
TXLSConnection = class // database, web, text, and refresh connection metadata
TXLSQueryTables = class // worksheet query-result collection
TXLSQueryTable = class // query ownership, fields, and result binding
Estas classes são independentes de lxHandle.TXLSWorkBook e lxHandle.TXLSWorksheet. As aplicações que precisem dos dois formatos podem usar as duas facades lado a lado:
uses
lxHandle, // XLS / HTML / RTF / CSV workbook (TXLSWorkBook)
lxHandleX; // XLSX workbook (TXLSXWorkbook)
Início rápido
A facade XLSX segue as mesmas convenções de forma de chamada que a facade BIFF — SaveAs / Open no livro, Sheets.Add / Sheets[i] na coleção de folhas de cálculo e Cells.Item[Row, Col].Value na coleção de células. O exemplo abaixo grava um pequeno livro que exerce todas as funcionalidades atualmente suportadas:
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;
Funcionalidades suportadas
- Valores de célula: números, booleans, strings, datas, fórmulas
- Tabela de strings partilhadas (
xl/sharedStrings.xml) com eliminação de duplicatas no caminho de gravação - Paletas de estilos ao nível do livro —
Workbook.Fonts,Fills,BorderseNumberFormats— maisFontIndex/FillIndex/BorderIndex/NumberFormatIndexpor célula. O SaveAs emite blocos reais<fonts>/<fills>/<borders>/<numFmts>+<cellXfs>; o Open analisa-os de novo, de modo que Name/Size/Bold/Italic/Color, padrões de preenchimento, lados de limites e formatos de número personalizados sobrevivam ao round trip - Larguras por coluna através de
Worksheet.ColWidth[Col]e alturas por linha através deWorksheet.RowHeight[Row](bloco<cols>da folha de cálculo e atributoshtpor<row>) cellXfde data incorporado no índiceXlsxXfIndexDate; os valoresTDateTimesão etiquetados automaticamente- Células unidas (
<mergeCells>), incluindoTXLSXRange.Merge(True)para união ao estilo do Excel através de linhas - Intervalos da folha de cálculo através de
Worksheet.Range,RCRange,UsedRange,EntireRoweEntireColumn. Veja TXLSXRange para valores em lote, fórmulas,SetArrayFormula, índices de estilo, formatos de número, limites, sinalizadores de proteção, ajuste automático, união, deslocamento, redimensionamento, ordenação multi-chave comSort, estilos de célula incorporados comApplyBuiltinStyle, auxiliares de copiar/mover, auxiliares de inserir/eliminar linhas ou colunas inteiras e exportação HTML do intervalo selecionado - Hiperligações (
<hyperlinks>) suportadas por rels por folha de cálculo para URLs externos - Comentários de célula com desenho VML (
xl/commentsN.xml+xl/drawings/vmlDrawingN.vml) para que os balões sejam renderizados no Excel - Imagens incorporadas (PNG / JPEG / GIF / BMP) através de
Worksheet.Images, gravadas emxl/media/imageN.<ext>mais XML de desenho e rels por folha - Caixas de texto de desenho autónomas via
Worksheet.AddTextBox, gravadas como formas de desenho da folha de cálculo com corpos de texto em vez de comentários de célula, com pesquisa direta de âncoras e auxiliares de eliminação por intervalo - Intervalos nomeados ao nível do livro via
Workbook.DefinedNames(no âmbito do livro ou da folha, através deSheetIndex) - Cálculo de fórmulas via
Workbook.CalculateeWorksheet.Calculate, partilhando o analisador e o avaliador de fórmulas XLS para fórmulas com igualdade inicial, referências de células e intervalos, células de fórmula referenciadas, referências entre folhas, nomes definidos por fórmulas aninhados, matrizes broadcast com erros por célula, matrizes de regressão e predição multivariável e funções de texto, data, dia útil, engenharia/conversão de base, bitwise, estatísticas, agregação e matemática suportadas; useWorkbook.OnUserFunctionouWorkbook.OnUserFunctionExpara resolver funções personalizadas ou não suportadas - Formatação condicional por folha de cálculo (
Worksheet.ConditionalFormats) e validação de dados (Worksheet.DataValidations), incluindo o atalho de lista pendenteAddListValidation(Range, Items) - Grupos de estrutura de tópicos de linhas/colunas (
RowOutlineLevel,ColOutlineLevel), estado oculto (RowHidden,ColHidden) e estado de grupo colapsado (RowCollapsed,ColCollapsed) - Painéis congelados via
Worksheet.FreezePanes(Row, Col) - Configuração de página — seis propriedades de margens, tamanho do papel, orientação, escala da página, ajustar à largura / ajustar à altura, mais
HeaderText/FooterText. Constantes nomeadasxlsxPaper*, comoxlsxPaperLetter,xlsxPaperA4,xlsxPaperA3exlsxPaperLegal, podem ser atribuídas aPaperSize - AutoFilter (
Worksheet.SetAutoFilter) - Tabelas ao estilo do Excel (TXLSXTable) com informações de estilo, colunas de tabela, rótulos e funções da linha de totais, fórmulas de colunas calculadas e fórmulas da linha de totais
APIs de subcoleções da facade
As classes de coleção da facade gerem formatos condicionais, validações de dados, intervalos nomeados, imagens e tabelas. Eis os membros principais de cada coleção:
- TXLSXConditionalFormats: Expõe regras de formatação condicional Propriedades:
CountMétodos:AddAboveAverage,AddColorScale2,AddColorScale3,AddDataBar,AddExisting,AddExpression,AddIconSet,AddSimpleRule,AddTextRule,AddTop10,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDataValidations: Expõe validações de dados Propriedades:
CountMétodos:AddExisting,AddList,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDefinedNames: Expõe nomes definidos (intervalos nomeados) Propriedades:
CountMétodos:DeleteByName,FindByName,IndexOfName - TXLSXImages: Expõe imagens incorporadas Propriedades:
CountMétodos:DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXTables: Expõe tabelas do Excel Propriedades:
CountMétodos:AddExisting,DeleteByName,FindByName,IndexOfName - TXLSConnections: Expõe as ligações de dados externas do livro através de
Workbook.ConnectionsPropriedades:CountMétodos:Add,AddExisting,FindById,FindByName,NextId,Validate - TXLSQueryTables: Expõe as definições de resultados de consultas da folha de cálculo através de
Worksheet.QueryTablesPropriedades:CountMétodos:Add,AddExisting,FindByName,FindByResultTableName,Validate
Funcionalidades suportadas
- Propriedades do documento (
Workbook.Title,Author,Subject,Keywords,Description,LastModifiedBy,Company, etc.) gravadas emdocProps/core.xml+docProps/app.xml - Proteção por palavra-passe da folha de cálculo / do livro (hash legado de 16 bits) através de
Worksheet.Protect/Workbook.ProtectWorkbook; gravação com palavra-passe AES compatível com o Excel através deSaveAsEncrypted, usando aceleração AES-NI quando disponível e fallback de software portável caso contrário.OpenEncryptedcontinua a gerar uma exceção para pacotes encriptados até que o suporte de desencriptação esteja disponível - Preservação do projeto VBA via
Workbook.LoadVbaProjectFromFile/VbaProject; os bytes fazem round trip sem alterações. PayloadsvbaProject.binválidos também podem ser inspecionados através deWorkbook.ParsedVBAProject - Gráficos — gráficos de colunas / barras / linhas / circular / área / anel / dispersão / bolhas / radar / cotações / superfície / 3D e combinados via TXLSXChart, ancorados numa folha de cálculo (
Worksheet.AddChart) ou em página completa numa folha de gráfico dedicada viaWorkbook.AddChartSheet(Name, Type, Title) - Células de rich text via TXLSXRichText com formatação de tipo de letra por run; fazem round trip através da tabela de strings partilhadas
- Âncoras de hiperligações internas via
Worksheet.AddHyperlinkToCell(Row, Col, "Sheet2!A1")(não é necessária uma relação de rels) - API de copiar / mover / limpar intervalos de células na folha de cálculo (
CopyRange,CopyRangeTo,MoveRange,ClearRange) - Alinhamento de células via TXLSXAlignment +
AlignmentIndexpor célula - Cor do separador da folha de cálculo via
Worksheet.TabColor/TabColorIsAuto - Modo de vista da folha de cálculo via
Worksheet.View, incluindo vista normal, pré-visualização de quebras de página e vista de disposição da página - Caminho de SaveAs em streaming (
Workbook.StreamingWrite := True) que constrói e grava cada folha de cálculo sem manter as outras em memória; o acumulador de XML por linha usaTXLSWideStringBuilderpara que o ciclo de células permaneça linear Opencom round trip para tudo o que está acima, exceto pacotes XLSX encriptados e identificação de folhas em folhas de gráfico, que recaem no comportamento parcial documentado- Exportação e importação baseadas em stream:
SaveAs(Stream),Open(Stream)para uso em memória ou em campos BLOB - Leitura/escrita OpenDocument Spreadsheet:
Workbook.OpenODSe oWorkbook.Opengenérico podem carregar pacotes.ods, enquantoWorkbook.SaveAsODSeSaveAs(..., xlsxOpenDocumentSpreadsheet)gravam saída ODS diretamente. A superfície do formato cobre valores, fórmulas, estilos, rich text, dimensões de linhas/colunas, uniões, hiperligações, imagens, gráficos, intervalos nomeados, AutoFilter, formatos condicionais, validações de dados, painéis congelados, configuração de página, cabeçalhos/rodapés, intervalos de impressão, quebras de página, grupos de estrutura de tópicos, cor do separador e visibilidade de folhas nas round trips suportadas - Opções de exportação ODS: passe
TODSExportOptionsaSaveAsODSpara substituir a cadeia do gerador do documento ou suprimir as partes de gráficos e imagens ao produzir um pacote mais leve - Importação de texto delimitado:
Workbook.OpenCSV(FileName)eWorkbook.OpenCSV(Stream)importam dados CSV ou TSV com deteção do separador, deteção da codificação pela BOM, aspas ao estilo RFC 4180 e inferência opcional do tipo de valor.Open(FileName)encaminha automaticamente ficheiros.csve.tsvpara o importador - Análise de metadados do livro:
Workbook.GetSheetNames(FileName, List)eWorkbook.GetSheetNames(Stream, List)leem os nomes das folhas por ordem a partir dexl/workbook.xml, sem carregar o XML das folhas de cálculo - Proteção de células:
TXLSXCell.LockedeFormulaHidden— controlam que células são editáveis ou cujas fórmulas são visíveis quando a folha está protegida - Ajuste automático da largura de colunas e da altura de linhas a partir do conteúdo das células:
Worksheet.AutoFitColumn,AutoFitColumns,AutoFitRow,AutoFitRows - Inserção e eliminação de linhas/colunas com cascata completa:
InsertRows,DeleteRows,InsertCols,DeleteCols. Os efeitos colaterais propagam-se por células, intervalos unidos, hiperligações, comentários, painel congelado, referências de strings de intervalo, tabelas, fórmulas de células, fórmulas de formatos condicionais / validações de dados, destinos de hiperligações internas, referências de configuração de impressão, quebras de página manuais, critérios de colunas do AutoFilter, intervalos de séries de gráficos, nomes definidos, âncoras de imagens e âncoras de gráficos - Configuração de página estendida:
PrintArea,PrintTitleRows,PrintTitleCols,PrintGridlines,PrintHeadings,BlackAndWhite,Draft,PrintNotes,PrintOverThenDown - Acesso ao payload opaco do controlador de impressão através de
PrinterDriverData,HasPrinterDriverDataeClearPrinterDriverData; as matrizes de bytes e as cópias da folha de cálculo têm propriedade independente, os payloads estão limitados a 1 MiB, e limpar remove a relação da folha de cálculo e a parte binária do pacote sem substituir os campos tipados de configuração de página; o carregamento liga apenas o identificador exato da relaçãopageSetupcom o tipo de relação exigido e um destino existente, enquanto referências em falta, com tipo errado ou pendentes emitemxlsDiagnosticPrinterSettingsRelationshipInvalidsem tomar emprestada outra parte binária - Calibração de renderização ao nível do livro através de
RenderCalibration,CaptureRenderCalibrationeResetRenderCalibration, com atribuição validada do registo completo e instantâneos de operação independentes para largura, altura, espaçamento de linha, margens de célula, escala do ecrã e DPI de medição - Geometria e medição de tipos de letra pertencentes à operação através de
CreateRenderGeometry, com calibração imutável e identidade de geração do livro, chaves de cache completas para tipos de letra e quebra de texto, cache local limitada e conversões partilhadas de píxel, ponto, largura de coluna, MDW e largura útil de célula - O AutoFit captura um instantâneo de geometria por operação ao nível do livro e mede os tipos de letra visíveis das células e o texto quebrado com espaçamento e margens calibrados; a paginação captura um instantâneo separado por construção, mantém as páginas lógicas existentes inalteradas até à próxima construção e nunca grava as dimensões da folha de cálculo
- Visibilidade de folhas:
Worksheet.Visibility(xlsxSheetVisible/xlsxSheetHidden/xlsxSheetVeryHidden) eIsSelected - Quebras de página manuais:
AddRowBreak,AddColBreak, pesquisa por índice e auxiliares de remoção por intervalo - Critérios de colunas do AutoFilter:
Worksheet.AddAutoFilterColumncom regras de filtro simples ou AND/OR de dois critérios, maisWorksheet.AutoFilterColumns.FindByColIdeDeleteByColIdpara pesquisa e remoção diretas de critérios (TXLSXAutoFilterColumn) - Base de datas do livro:
Workbook.Date1904alterna entre a época de datas de 1900 (predefinição no Windows) e a de 1904 (Mac) - Limites diagonais:
TXLSXBorder.DiagonalUpeDiagonalDownativam as linhas diagonais; o ladoDiagonaltransporta o estilo e a cor - Propriedades estendidas do tipo de letra:
TXLSXFont.VertAlign(sobrescrito / subscrito),OutlineFont,Shadow,Family,CharSet - Metadados de intervalos nomeados:
TXLSXDefinedName.HiddeneComment - Opções de vista da folha de cálculo:
Worksheet.Zoom,DisplayGridLines,DisplayZeros,DisplayRightToLeft,StandardWidth,StandardHeight - Paleta legada de cores indexadas do OOXML:
Workbook.IndexedColor[0..63]comResetIndexedColors - Ligações a livros externos:
Workbook.ExternalLinks/ TXLSXExternalLink — round trip do URL de destino e dos metadados SheetNames - Ligações de dados externas e resultados de consultas:
Workbook.Connections/Worksheet.QueryTables— ligações tipadas de atualização, credenciais, comando, web, texto, parâmetros, campos, tabelas e nomes definidos, com round trip seguro para extensões - Suporte a cores de tema em
TXLSXFont,TXLSXFilleTXLSXBorderEdge: propriedadesColorTheme/ColorIndex/TintAndShadecom ordenação de prioridade (theme > indexed > RGB) - Conversão BIFF8 através das sobrecargas de ficheiro e stream de
SaveXLSXWorkbookAsXLS, com um plano determinístico de paleta de 56 cores, preservação dos slots indexados já usados pelos estilos do livro, quantização OKLab ponderada quando as cores diretas excedem os slots disponíveis, travessia esparsa das células carregadas e rejeição em preflight de linhas ou colunas fora da grelha XLS; os campos tipados de impressão e os dados opacos de impressora são convertidos de forma independente, os limites BIFF8 são verificados antes de gravar o stream de destino, os campos padrão têm prioridade sobre predefinições privadas duplicadas, e o sinalizadorUsePrinterDefaults, exclusivo do OOXML, não é sintetizado para Classic XLS - Exportação CSV:
Workbook.SaveAsCSV— 4 sobrecargas (FileName ou Stream × folha ativa / SheetIndex explícito + Delimiter), UTF-8 com BOM, aspas RFC 4180 - Exportação HTML:
Workbook.SaveAsHTMLeTXLSXRange.SaveAsHTMLgravam tabelas HTML5 para uma folha inteira do livro ou apenas para o retângulo selecionado. As sobrecargas de opções aceitamTXLSXHtmlExportOptionspara saída do documento completo, emissão de estilos, emissão de BOM e nomeação de classes de tabela - Exportação RTF:
Workbook.SaveAsRTF— 4 sobrecargas, tabela RTF 1.6 com larguras de coluna, formatação de tipo de letra por célula e unicode full-BMP através de escapes\uN?de 16 bits com sinal
Infraestrutura partilhada
As duas facades partilham um conjunto comum de units auxiliares de nível mais baixo, o que significa que os descritores de estilo, as tabelas de hash, as árvores AVL, a E/S de ZIP e XML, as conversões de RGB para HLS e os construtores de strings são escritos uma vez e usados por qualquer um dos caminhos. Os auxiliares partilhados incluem:
lxStyleXf,lxStyleFont,lxStyleColor,lxStyleFill,lxStyleBorder— descritores de estilo modernoslxRgb— conversão de cores RGB / HLSlxHashTable,lxKeyList,lxAvlTree,lxCols,lxRows— contentores com eliminação de duplicatas e blocos de construção de heap de células suportada por AVLlxXmlReader,lxXmlWriter,lxZipArchive— camada de transporte OOXMLlxStrBuilder,lxCacheStream,lxWStream,lxZlibStream— auxiliares de montagem de streams e strings