O HotXLS consegue abrir um livro XLSX e não analisar nenhuma célula de folha de cálculo. TXLSXWorkbook.MetadataOnly lê as propriedades do livro, os nomes definidos, os nomes e estados de visibilidade das folhas, os estilos, o tema, as ligações e as ligações externas, e depois para antes do XML das células. Para um analisador que precisa de saber o que está num diretório de livros, essa é a diferença entre minutos e segundos
Três comutadores relacionados completam o panorama: SelectedSheets analisa células para um subconjunto nomeado, LoadSheet materializa uma folha ignorada mais tarde a partir do arquivo original, e PreserveRawParts copia os bytes comprimidos das partes inalteradas diretamente na gravação. Usados em conjunto transformam "abrir um livro" de uma operação tudo ou nada em algo que consegue dimensionar
O que se consegue saber sem analisar uma única célula?
Mais do que a maioria das tarefas de deteção precisa. Com MetadataOnly definido antes de Open, o livro volta a transportar os seus nomes de folha e estados de visibilidade, os seus nomes definidos, as suas propriedades do documento, os seus estilos e tema, as suas ligações externas e as suas ligações. As folhas estão presentes como objetos com zero células
É exatamente a informação com que um catálogo, uma auditoria ou uma decisão de encaminhamento trabalham. Que livros definem um nome chamado TaxRate? Quais têm folhas ocultas? Quais se ligam a um servidor que foi desativado? Responder a isto carregando cada ficheiro por completo é como um trabalho noturno se torna um trabalho de toda a noite
var
Workbook: TXLSXWorkbook;
I: Integer;
begin
Workbook := TXLSXWorkbook.Create(nil);
try
Workbook.MetadataOnly := True; // set before Open
Workbook.Open(FileName);
for I := 1 to Workbook.Sheets.Count do // Sheets[] is 1-based
if not Workbook.Sheets[I].Visible then
Report.Add(FileName + ': hidden sheet ' +
Workbook.Sheets[I].Name);
finally
Workbook.Free;
end;
end;
Carregar duas folhas de quarenta
SelectedSheets é um TStringList de nomes de folha. Quando não está vazio, Open analisa o XML das células apenas para as folhas que nomeia; todas as outras folhas mantêm o seu nome e estado de visibilidade corretos e não contêm células. Uma lista vazia significa o comportamento anterior, que é carregar tudo
A interação com MetadataOnly vale a pena afirmar claramente, porque inverter a relação produz um livro vazio desconcertante: MetadataOnly = True sobrepõe-se à seleção e ignora todas as folhas. Use um ou outro. A deteção usa apenas metadados; o trabalho direcionado usa uma seleção
Workbook.SelectedSheets.Add('Summary');
Workbook.SelectedSheets.Add('Q3 Detail');
Workbook.Open('consolidated-2026.xlsx');
// Later, when the user opens a tab you skipped.
// LoadSheet takes the 0-based position and needs the source file,
// so it does not work on a workbook opened from a stream
if Workbook.LoadSheet(ZeroBasedPosition) then
Grid.Refresh;
LoadSheet(Index) materializa uma folha ignorada a pedido a partir do arquivo original, que é o que torna este padrão utilizável numa aplicação interativa em vez de apenas num lote. Abra com a folha que o utilizador está a ver, carregue as outras quando ele clica. O arquivo mantém-se aberto exatamente por essa razão, pelo que mantenha o livro vivo durante o tempo que o utilizador possa pedir outra folha
Porque razão é que uma ida e volta muda partes que nunca tocou?
Porque uma gravação ingénua regenera tudo. Descomprima o tema, construa um modelo de objetos, serialize-o de volta, recomprima — e agora os bytes diferem embora nada sobre o tema tenha mudado. Para projetos VBA e caches pivô isso é pior do que desperdício, porque essas partes transportam estrutura que o modelo de objetos não representa totalmente
PreserveRawParts responde a isto copiando a representação comprimida das partes inalteradas diretamente do arquivo de origem durante o SaveAs. Tema, projeto VBA, tabelas pivô e caches pivô movem-se como bytes quando não foram modificados. Sem descompressão, sem recompressão, sem risco de perder algo numa ida e volta de serialização
O custo é uma restrição que já tinha: o arquivo de origem tem de continuar disponível no momento da gravação. Se o seu fluxo de trabalho lê um ficheiro para memória, fecha-o e grava uma hora depois, o caminho de cópia em bruto não tem nada de onde copiar. Mantenha a origem acessível durante o tempo de vida do livro, que é o mesmo requisito que LoadSheet impõe
Um pipeline de deteção que reabre propositadamente
O padrão que funciona em produção tem duas passagens e nenhuma engenhosidade. A passagem um abre apenas com metadados e decide. A passagem dois reabre os ficheiros que importam com uma seleção de folhas e faz o trabalho. Reabrir parece desperdício até contar o que a passagem um evitou: a segunda abertura é a única que analisa células, e analisa apenas as folhas que a passagem um selecionou
// Pass 1: discovery
Workbook.MetadataOnly := True;
Workbook.Open(FileName);
Wanted := SheetsMatching(Workbook, 'Invoice');
Workbook.Free;
// Pass 2: targeted load
Workbook := TXLSXWorkbook.Create(nil);
Workbook.SelectedSheets.AddStrings(Wanted);
Workbook.Open(FileName);
Não tente promover um livro só com metadados no mesmo objeto limpando o sinalizador depois de Open. O sinalizador é lido durante a abertura; limpá-lo depois não muda nada sobre um livro cujo XML de células nunca foi visitado
Onde isto se encaixa com as outras alavancas de ficheiros grandes
O carregamento seletivo reduz o que analisa. Não reduz o que uma folha custa depois de carregada, e não ajuda quando genuinamente precisa de cada célula de cada folha. Para esse caso o trabalho relevante está do lado do armazenamento, descrito nas notas sobre armazenamento de células em blocos de linha e sobreposições de estilos por intervalo, e do lado da análise em análise XLSX paralela e o alocador de memória. Quando a tarefa é uma análise pura sem qualquer edição, o leitor direto em fluxo salta o modelo de objetos inteiramente e bate qualquer estratégia de carregamento que construa um
O HotXLS abre ficheiros XLS e XLSX a partir de código nativo Delphi e C++Builder sem qualquer dependência de Excel, pelo que um trabalho de deteção do lado do servidor corre com nada instalado além do seu próprio executável — veja a página do componente de folha de cálculo HotXLS para os formatos suportados e licenciamento