Visão geral do XLSX Facade (lxHandleX)
lxHandleX é a unidade facade dedicada para fluxos de trabalho de pasta de trabalho do Excel 2007+ (.xlsx) e OpenDocument Spreadsheet (.ods). Coexiste com a facade original lxHandle para que o código legado continue funcionando sem alterações
lxHandle— facade principal para o formato BIFF do Excel 97-2003 (.xls) e exportações de HTML, RTF, CSV e TSV. Todo o código de usuário existente continua a usar esta unit sem alteraçõeslxHandleX— facade principal para o formato OOXML do Excel 2007+ (.xlsx) e fluxos de leitura/gravação ODS. Fornece seus próprios tipos de pasta de trabalho e planilha para que o comportamento específico do XLSX não seja adaptado ao caminho do código BIFF, e expõe importação e exportação de ODS, detecção automática de ODS através deOpen,SourceFormat, eTODSExportOptions
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
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)
Estas classes são independentes de lxHandle.TXLSWorkBook e
lxHandle.TXLSWorksheet. Aplicações que precisam de ambos os formatos podem
usar ambas as 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 formato de chamada que a facade
BIFF — SaveAs / Open na pasta de trabalho,
Sheets.Add / Sheets[i] na coleção de planilhas
e Cells.Item[Row, Col].Value na coleção de células. O exemplo abaixo grava uma pequena pasta de trabalho que exercita cada
recurso atualmente suportado
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;
Recursos suportados
- Valores das células: números, booleanos, strings, datas, fórmulas
- Tabela de strings compartilhadas (
xl/sharedStrings.xml) com eliminação de duplicatas no caminho de gravação - Paletas de estilos no nível da pasta de trabalho —
Workbook.Fonts,Fills,Borders, eNumberFormats— maisFontIndex/FillIndex/BorderIndex/NumberFormatIndexpor célula. SaveAs emite blocos<fonts>/<fills>/<borders>/<numFmts>+<cellXfs>reais; Open os analisa de volta para que Nome/Tamanho/Negrito/Itálico/Cor, padrões de preenchimento, bordas e formatos de números personalizados sobrevivam à viagem de ida e volta - Larguras por coluna por meio de
Worksheet.ColWidth[Col]e alturas por linha por meio deWorksheet.RowHeight[Row](bloco de planilha<cols>e atributoshtpor<row>) - Data integrada
cellXfno índiceXlsxXfIndexDate; valoresTDateTimesão marcados automaticamente - Células mescladas (
<mergeCells>), incluindoTXLSXRange.Merge(True)para mesclagem entre linhas no estilo do Excel - Intervalos de planilhas por meio de
Worksheet.Range,RCRange,UsedRange,EntireRow, eEntireColumn. Veja TXLSXRange para valores em lote, fórmulas,SetArrayFormula, índices de estilo, formatos de números, bordas, sinalizações de proteção, ajuste automático, mesclagem, deslocamento, redimensionamento, ordenação de chaves múltiplasSort, estilos de célula integradosApplyBuiltinStyle, auxiliares de copiar/mover, auxiliares de inserção/exclusão de linha inteira/coluna inteira e exportação de HTML de intervalo selecionado - Hiperlinks (
<hyperlinks>) apoiados por rels de planilha por planilha para URLs externas - Comentários de células 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) por meio de
Worksheet.Images, gravadas emxl/media/imageN.<ext>mais XML de desenho por planilha e rels - Caixas de texto de desenho independentes por meio de
Worksheet.AddTextBox, gravadas como formas de desenho de planilha com corpos de texto em vez de comentários de células, com busca direta de âncora e auxiliares de exclusão de intervalo - Intervalos nomeados no nível da pasta de trabalho por meio de
Workbook.DefinedNames(com escopo de pasta de trabalho ou com escopo de planilha por meio deSheetIndex) - Cálculo de fórmulas por meio de
Workbook.CalculateeWorksheet.Calculate, compartilhando o analisador e avaliador de fórmulas XLS para fórmulas com sinal de igual no início, referências de célula e intervalo, células de fórmula referenciadas, referências entre planilhas, intervalos de nomes definidos e funções de texto, data, dia útil, engenharia/conversão de base, bit a bit, estatísticas, agregadas e matemáticas suportadas; useWorkbook.OnUserFunctionouWorkbook.OnUserFunctionExpara resolver funções personalizadas ou não suportadas - Formatação condicional por planilha
(
Worksheet.ConditionalFormats) e validação de dados (Worksheet.DataValidations) incluindo o atalho dropdownAddListValidation(Range, Items) - Grupos de esboço de linha / coluna (
RowOutlineLevel,ColOutlineLevel), estado oculto (RowHidden,ColHidden) e estado de grupo recolhido (RowCollapsed,ColCollapsed) - Painéis congelados por meio de
Worksheet.FreezePanes(Row, Col) - Configuração da página — seis propriedades de margem, tamanho do papel, orientação,
escala da página, ajustar à largura / ajustar à altura, mais
HeaderText/FooterText. Constantes nomeadasxlsxPaper*comoxlsxPaperLetter,xlsxPaperA4,xlsxPaperA3, exlsxPaperLegalpodem ser atribuídas aPaperSize - Autofiltro (
Worksheet.SetAutoFilter) - Tabelas no estilo do Excel (TXLSXTable) com informações de estilo e tableColumns
APIs de subcoleção de Facade
As classes de coleção de facade gerenciam formatos condicionais, validações de dados, intervalos nomeados, imagens e tabelas. Aqui estão 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
Recursos suportados
- Propriedades do documento (
Workbook.Title,Author,Subject,Keywords,Description,LastModifiedBy,Company, etc.) gravadas emdocProps/core.xml+docProps/app.xml - Proteção por senha da planilha / pasta de trabalho (hash legado de 16 bits)
por meio de
Worksheet.Protect/Workbook.ProtectWorkbook; salvamento protegido por senha AES compatível com o Excel por meio deSaveAsEncrypted, usando aceleração AES-NI quando disponível e fallback de software portátil caso contrário.OpenEncryptedainda gera erro para pacotes criptografados até que o suporte à decodificação seja implementado - Preservação do projeto VBA por meio de
Workbook.LoadVbaProjectFromFile/VbaProject; os bytes fazem a viagem de ida e volta sem alterações. As cargas úteis válidas devbaProject.bintambém podem ser inspecionadas por meio deWorkbook.ParsedVBAProject - Gráficos — coluna / barra / linha / pizza / área / rosca por meio de
TXLSXChart, ancorados
em uma planilha (
Worksheet.AddChart) ou em página inteira em uma planilha de gráfico dedicada por meio deWorkbook.AddChartSheet(Name, Type, Title) - Células com rich-text por meio de TXLSXRichText com formatação de fonte por execução; faz a viagem de ida e volta por meio da tabela de strings compartilhadas
- Âncoras de hiperlink interno por meio de
Worksheet.AddHyperlinkToCell(Row, Col, "Sheet2!A1")(nenhum relacionamento rels necessário) - API de copiar / mover / limpar intervalo de células na planilha
(
CopyRange,CopyRangeTo,MoveRange,ClearRange) - Alinhamento de célula por meio de
TXLSXAlignment +
AlignmentIndexpor célula - Cor da guia da planilha por meio de
Worksheet.TabColor/TabColorIsAuto - Modo de visualização da planilha por meio de
Worksheet.View, incluindo visualização normal, visualização de quebra de página e visualização de layout de página - Caminho de SaveAs em fluxo (
Workbook.StreamingWrite := True) que constrói e grava cada planilha sem manter as outras na memória; o acumulador XML por linha usaTXLSWideStringBuilderpara que o loop da célula permaneça linear - Viagem de ida e volta de
Openpara tudo acima, exceto pacotes XLSX criptografados e identificação de planilhas de gráfico, que retornam para o comportamento parcial documentado - Exportação e importação baseada em fluxo:
SaveAs(Stream),Open(Stream)para uso em memória ou campos BLOB - Leitura/gravação de OpenDocument Spreadsheet:
Workbook.OpenODSe o genéricoWorkbook.Openpodem carregar pacotes.ods, enquantoWorkbook.SaveAsODSandSaveAs(..., xlsxOpenDocumentSpreadsheet)gravam a saída ODS diretamente. A superfície do formato abrange valores, fórmulas, estilos, rich text, dimensões de linha/coluna, mesclagens, hiperlinks, imagens, gráficos, intervalos nomeados, AutoFilter, formatos condicionais, validações de dados, congelamento de painéis, configuração de página, cabeçalhos/rodapés, intervalos de impressão, quebras de página, grupos de esboço, cor de guia e visibilidade da planilha em todas as viagens de ida e volta suportadas - Opções de exportação ODS: passe
TODSExportOptionsparaSaveAsODSpara substituir a string geradora do documento ou suprimir partes de gráfico e imagem ao produzir um pacote mais leve - Importação de texto delimitado:
Workbook.OpenCSV(FileName)eWorkbook.OpenCSV(Stream)importam dados CSV ou TSV com identificação de separador, detecção de codificação BOM, citações no estilo RFC 4180, e inferência de tipo de valor opcional.Open(FileName)direciona arquivos.csve.tsvpara o importador automaticamente - Varredura de metadados da pasta de trabalho:
Workbook.GetSheetNames(FileName, List)eWorkbook.GetSheetNames(Stream, List)leem nomes de planilhas ordenados dexl/workbook.xmlsem carregar o XML da planilha - Proteção de células:
TXLSXCell.LockedeFormulaHidden— controlam quais células são editáveis ou cujas fórmulas são visíveis quando a planilha está protegida - Ajuste automático da largura da coluna e da altura da linha a partir do conteúdo da célula:
Worksheet.AutoFitColumn,AutoFitColumns,Worksheet.AutoFitRow,AutoFitRows - Inserção e exclusão de linha / coluna com cascata completa:
InsertRows,DeleteRows,InsertCols,DeleteCols. Os efeitos colaterais propagam-se através de células, intervalos mesclados, hiperlinks, comentários, congelamento de painel, referências de string de intervalo, tabelas, fórmulas de célula, fórmulas de formatação condicional / validação de dados, destinos de hiperlink interno, referências de configuração de impressão, quebras de página manuais, critérios de coluna de autofiltro, intervalos de séries de gráficos, nomes definidos, âncoras de imagem e âncoras de gráfico - Configuração de página estendida:
PrintArea,PrintTitleRows,PrintTitleCols,PrintGridlines,PrintHeadings,BlackAndWhite,Draft,PrintNotes,PrintOverThenDown - Visibilidade da planilha:
Worksheet.Visibility(xlsxSheetVisible/xlsxSheetHidden/xlsxSheetVeryHidden) eIsSelected - Quebras de página manuais:
AddRowBreak,AddColBreak, busca de índice e auxiliares de remoção de intervalo - Critérios de coluna de autofiltro:
Worksheet.AddAutoFilterColumncom regras de filtro de critério único ou AND/OR de dois critérios, maisWorksheet.AutoFilterColumns.FindByColIdeDeleteByColIdpara busca direta e remoção de critérios (TXLSXAutoFilterColumn) - Base de data da pasta de trabalho:
Workbook.Date1904alterna entre a época de data de 1900 (padrão do Windows) e 1904 (Mac) - Bordas diagonais:
TXLSXBorder.DiagonalUpeDiagonalDownativam as linhas diagonais; a bordaDiagonalcarrega o estilo e a cor - Propriedades de fonte estendidas:
TXLSXFont.VertAlign(sobrescrito / subscrito),OutlineFont,Shadow,Family,CharSet - Metadados de intervalo nomeado:
TXLSXDefinedName.HiddeneComment - Opções de visualização de planilha:
Worksheet.Zoom,DisplayGridLines,DisplayZeros,DisplayRightToLeft,StandardWidth,StandardHeight - Paleta de cores indexadas herdada do OOXML:
Workbook.IndexedColor[0..63]comResetIndexedColors - Links de pastas de trabalho externas:
Workbook.ExternalLinks/ TXLSXExternalLink — URL de destino + viagem de ida e volta de metadados SheetNames - Suporte a cores de tema em
TXLSXFont,TXLSXFill, eTXLSXBorderEdge: propriedadesColorTheme/ColorIndex/TintAndShadecom ordem de prioridade (tema > indexado > RGB) - Exportação de CSV:
Workbook.SaveAsCSV— 4 sobrecargas (FileName ou Stream × active-sheet / explicit SheetIndex + Delimiter), UTF-8 com BOM, citações RFC 4180 - Exportação de HTML:
Workbook.SaveAsHTMLeTXLSXRange.SaveAsHTMLgravam tabelas HTML5 para uma planilha inteira da pasta de trabalho ou apenas o retângulo selecionado. Sobrecargas de opções aceitamTXLSXHtmlExportOptionspara saída de documento completo, emissão de estilo, emissão de BOM e nomeação de classe de tabela - Exportação de RTF:
Workbook.SaveAsRTF— 4 sobrecargas, tabela RTF 1.6 com larguras de coluna, formatação de fonte por célula e unicode full-BMP via escapes\uN?de 16 bits com sinal
Infraestrutura compartilhada
Ambas as facades compartilham um conjunto comum de unidades auxiliares de nível inferior, o que significa que descritores de estilo, tabelas hash, árvores AVL, E/S de ZIP e XML, conversões de RGB para HLS e construtores de strings são gravados uma vez e usados por qualquer caminho Os auxiliares compartilhados incluem
lxStyleXf,lxStyleFont,lxStyleColor,lxStyleFill,lxStyleBorder— descritores de estilo modernoslxRgb— conversão de cores RGB / HLSlxHashTable,lxKeyList,lxAvlTree,lxCols,lxRows— contêineres de eliminação de duplicatas e blocos de construção de heap de células baseados em AVLlxXmlReader,lxXmlWriter,lxZipArchive— camada de transporte OOXMLlxStrBuilder,lxCacheStream,lxWStream,lxZlibStream— auxiliares de montagem de fluxos e strings