Når du behandler store grupper med Excel-regneark i en automatisert rørledning, ønsker du sjelden å laste inn hele dokumentet i minnet bare for å finne ut hva det er. Ofte er metadataene innebygd i filen (forfatter, tittel, opprettelsesdato og egendefinerte egenskaper) nok til å rute, indeksere eller avvise dokumentet. I Microsoft Office-verdenen er disse metadataene kjent som dokumentsammendragsinformasjon.
Å trekke ut denne informasjonen opprinnelig i Delphi uten å stole på OLE-automatisering (som krever at Excel er installert på vertsmaskinen) krever å analysere den underliggende filstrukturen direkte. I denne artikkelen skal vi se på hvordan dokumentsammendrag fungerer i Excel-filer og hvordan du trekker dem ut effektivt.
Forståelse av Excel-metadatastrømmer
Historisk sett er eldre Excel-filer (.xls) lagret i OLE Compound Document-formater, som effektivt fungerer som mini-filsystemer som inneholder strømmer og lagringer. Metadataene er plassert i to spesifikke strømmer:
\005SummaryInformation: Inneholder standardegenskaper som tittel, emne, forfatter, nøkkelord og revisjonsnummer.\005DocumentSummaryInformation: Inneholder utvidede egenskaper som selskap, leder og egendefinerte brukerdefinerte egenskaper.
Moderne Excel-filer (.xlsx) bruker Office Open XML (OOXML)-formatet, som er en zippet XML-struktur. Metadataene her ligger i docProps/core.xml, docProps/app.xml og docProps/custom.xml. En robust Delphi-analyseringskomponent må sømløst håndtere begge interne strukturer, samtidig som den eksponerer en enhetlig API for utvikleren.
Programmatisk ekstrahering med HotXLS
Nylige oppdateringer til HotXLS-komponenten introduserte dedikerte enheter (for eksempel lxXlsSummary) for å isolere og optimalisere lesingen av disse sammendragsstrømmene. I stedet for å starte opp den fulle gjengivelsesmotoren for arbeidsboken, analyserer sammendragsleseren bare de spesifikke OLE-strømmene eller OOXML-nodene som kreves.
Et praktisk eksempel
Ved å bruke grensesnittene XlsReadDocumentSummaryInformation og XlsReadSummaryInformation kan du raskt hente metadatastrengene. Her er et konseptuelt eksempel på hvordan du kan bruke disse API-ene i din Delphi-kode:
uses
lxXlsSummary;
var
Summary: TXlsSummaryInfo;
ExtendedInfo: TXlsDocumentSummaryInfo;
begin
// Extract standard summary
Summary := XlsReadSummaryInformation('C:\Data\FinancialReport.xls');
try
Writeln('Title: ', Summary.Title);
Writeln('Author: ', Summary.Author);
Writeln('Creation Date: ', DateTimeToStr(Summary.CreateTime));
finally
Summary.Free;
end;
// Extract extended document summary
ExtendedInfo := XlsReadDocumentSummaryInformation('C:\Data\FinancialReport.xls');
try
Writeln('Company: ', ExtendedInfo.Company);
Writeln('Manager: ', ExtendedInfo.Manager);
finally
ExtendedInfo.Free;
end;
end;
Hvorfor dedikert ekstrahering av sammendrag er viktig
Den primære fordelen med denne tilnærmingen er ytelse og minnesikkerhet. Ved å unngå instansiering av den fulle arbeidsbok-DOM-en (Document Object Model), forblir applikasjonens fotavtrykk utrolig lite. Hvis du indekserer 10 000 Excel-filer over en nettverksdeling, vil det å forsøke å fullstendig analysere hver av dem belaste minnet ditt og ta timer. Dedikert ekstrahering av sammendrag fullfører samme oppgave på sekunder.
Videre sikrer det å lese strømmene direkte at applikasjonen din kan kjøre som en bakgrunnstjeneste eller på en hodeløs server uten noen gang å starte Excel.exe (et kritisk krav for moderne skalerbare arkitekturer).
Merk: Omfattende verktøy for Excel-analysering og metadataekstrahering er tilgjengelige i HotXLS VCL Component.
\n