O HotXLS consegue abrir uma pasta de trabalho XLSX sem analisar nenhuma célula de planilha. TXLSXWorkbook.MetadataOnly lê propriedades da pasta de trabalho, nomes definidos, nomes e estados de visibilidade de planilhas, estilos, tema, conexões e links externos, e então para antes do XML de células. Para um scanner que precisa saber o que há em um diretório de pastas de trabalho, essa é a diferença entre minutos e segundos
Três interruptores relacionados completam o quadro: SelectedSheets analisa células para um subconjunto nomeado, LoadSheet materializa uma planilha pulada depois a partir do arquivo original, e PreserveRawParts copia os bytes comprimidos das partes não alteradas direto no salvamento. Usados juntos eles transformam "abrir uma pasta de trabalho" de uma operação tudo ou nada em algo que você pode delimitar
O que dá para aprender sem analisar uma única célula?
Mais do que a maioria das tarefas de descoberta precisa. Com MetadataOnly definido antes de Open, a pasta de trabalho volta carregando seus nomes e estados de visibilidade de planilhas, seus nomes definidos, suas propriedades de documento, seus estilos e tema, seus links externos e suas conexões. As planilhas estão presentes como objetos com zero células
Isso é exatamente a informação sobre a qual roda um catálogo, uma auditoria ou uma decisão de roteamento. Quais pastas de trabalho definem um nome chamado TaxRate? Quais têm planilhas ocultas? Quais se ligam a um servidor que foi desativado? Responder a isso carregando cada arquivo por completo é como um job noturno vira um job a noite toda
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;
Carregando duas planilhas em quarenta
SelectedSheets é uma TStringList de nomes de planilhas. Quando ela está não vazia, Open analisa o XML de células apenas para as planilhas que nomeia; todas as outras planilhas mantêm seu nome e estado de visibilidade corretos e não seguram células. Uma lista vazia significa o comportamento anterior, que é carregar tudo
A interação com MetadataOnly vale a pena dizer de forma direta, porque inverter isso produz uma pasta de trabalho vazia que intrigava: MetadataOnly = True sobrescreve a seleção e pula todas as planilhas. Use um ou outro. Descoberta usa somente metadados; 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 planilha pulada por demanda a partir do arquivo original, que é o que torna esse padrão utilizável em uma aplicação interativa em vez de apenas em um lote. Abra com a planilha que o usuário está olhando, carregue as outras quando ele clicar. O arquivo fica aberto exatamente por isso, então mantenha a pasta de trabalho viva pelo tempo que o usuário puder pedir outra planilha
Por que uma ida e volta muda partes que você nunca tocou?
Porque um salvamento ingênuo regenera tudo. Descomprima o tema, construa um modelo de objetos, serializa de volta, recomprima — e agora os bytes diferem embora nada sobre o tema tenha mudado. Para projetos VBA e caches de tabela dinâmica isso é pior do que desperdício, porque essas partes carregam estrutura que o modelo de objetos não representa por completo
PreserveRawParts responde a isso copiando a representação comprimida das partes não alteradas diretamente do arquivo de origem durante SaveAs. Tema, projeto VBA, tabelas dinâmicas e caches dinâmicos cruzam como bytes quando não foram modificados. Sem descompressão, sem recompressão, sem risco de perder algo em uma ida e volta de serialização
O custo é uma restrição que você já tinha: o arquivo de origem precisa ainda estar disponível no momento do salvamento. Se o seu fluxo lê um arquivo em memória, fecha e salva uma hora depois, o caminho de cópia bruta não tem de onde copiar. Mantenha a origem alcançável pelo tempo de vida da pasta de trabalho, que é o mesmo requisito que LoadSheet impõe
Um pipeline de descoberta que reabre de propósito
O padrão que funciona em produção tem duas passagens e nenhuma esperteza. A primeira abre somente metadados e decide. A segunda reabre os arquivos que importam com uma seleção de planilhas e faz o trabalho. Reabrir parece desperdício até você contar o que a primeira passagem evitou: a segunda abertura é a única que analisa células, e analisa apenas as planilhas que a primeira 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 uma pasta de trabalho somente metadados no lugar limpando o flag depois de Open. O flag é lido durante a abertura; limpá-lo depois não muda nada sobre uma pasta de trabalho cujo XML de células nunca foi visitado
Onde isso se encaixa com as outras alavancas de arquivos grandes
O carregamento seletivo reduz o que você analisa. Ele não reduz o que uma planilha custa depois de carregada, e não ajuda quando você de fato precisa de toda célula de toda planilha. Para esse caso o trabalho relevante é do lado do armazenamento, descrito nas notas sobre armazenamento de células em blocos de linha e sobreposições de estilo por intervalo, e do lado da análise em análise paralela de XLSX e o alocador de memória. Quando a tarefa é uma varredura pura sem nenhuma edição, o leitor direto em streaming pula o modelo de objetos inteiramente e vai bater qualquer estratégia de carregamento que construa um
O HotXLS abre arquivos XLS e XLSX a partir de código nativo em Delphi e C++Builder sem nenhuma dependência de Excel, de modo que um job de descoberta no servidor roda com nada instalado além do seu próprio executável — veja a página do componente de planilha HotXLS para os formatos e licenciamentos suportados