HotXLS oppretter Excel Sparklines (minidiagrammer) — de små diagrammene Excel tegner inni en enkelt celle — fra Delphi og C++Builder med ett enkelt kall: TXLSXWorksheet.AddSparklineGroup bygger en minidiagramgruppe over et dataområde, og lagring av arbeidsboken skriver det som en x14-utvidelsesblokk inni regnearkets extLst, noe Excel 2010 og nyere tegner og eldre lesere hopper over uten å klage. Ingen diagramobjekter, ingen tegnedeler, ingen ankere
Scenarioet som gjør minidiagrammer verdt å ha, er alltid det samme. En instrumentpanel-arbeidsbok inneholder noen hundre rader, én per produkt, region eller konto, med tolv månedlige tall hver, og noen ønsker et trend-symbol i slutten av hver rad. Modellerer du dette med virkelige diagrammer, oppretter du hundrevis av DrawingML-diagramdeler, hver med sin egen XML-del, relasjon og ankergeometri, for ikke å snakke om hva det gjør med filstørrelse og åpningstid. En minidiagramgruppe er én XML-blokk som sier "tegn en liten linje fra B2:M2 inn i N2, og fra B3:M3 inn i N3," gjentatt billig for så mange rader du har
Hvorfor er minidiagrammer en x14-utvidelse i stedet for et diagram?
Minidiagrammer kom med Excel 2010, tre år etter at ECMA-376-basisskjemaet ble frosset, så de kunne ikke leve i selve regnearkets oppmerking uten å ødelegge for alle eksisterende lesere. Microsofts løsning er listen over utvidelser: et regneark kann ende med et <extLst>-element som inneholder <ext>-blokker, hver tagget med en URI som identifiserer funksjonen ([MS-XLSX] §2.3.6). Minidiagrammer bruker URI-en {05C60535-1F16-4fd2-B633-F4F36F0B64E0} og navnerommet x14. En leser som gjenkjenner GUID-en analyserer blokken; en leser som ikke gjør det, må hoppe over den. Dette er hele historien om fremoverkompatibilitet, og det er grunnen til at Excel 2007 åpner en arbeidsbok med minidiagrammer uten problemer — den viser ganske enkelt kildetallene uten symbolene
En detalj ved mekanismen er verdt å trekke frem fordi den motsier en vanlig antakelse: ingen mc:Ignorable-deklarasjon er nødvendig på regnearkets rot. Utvidelsens GUID-port er tilstrekkelig i seg selv, og Excels egen skrivefunksjon deklarerer x14-navnerommet lokalt på <ext>-elementet i stedet for å røre roten. HotXLS følger det samme mønsteret, noe som holder resten av regneark-XML-en urørt. Dette er også den strukturelle forskjellen fra virkelige diagrammer: et diagram er en egen DrawingML-del med sin egen renderings-pipeline, dekket i den tilhørende artikkelen om diagrammer, bilder og tegninger, mens et minidiagram er metadata for regnearket som selve regneark-rutenettet tegner
Hvordan legger du til minidiagrammer i en XLSX-fil programmatisk?
TXLSXWorksheet.AddSparklineGroup(AType, ASourceRange, ALocation) er ettkalls-banen: den oppretter en gruppe av den gitte typen, sår den med Excels standard seriefarge, og legger til det første minidiagrammet som kartlegger et ark-kvalifisert kildeområde på en vertscelle. Den returnerte TXLSXSparklineGroup godtar deretter flere minidiagrammer via sin Add-metode, ett F/Sqref-par per rad, der alle deler gruppens type og formatering. For instrumentpanel-tilfellet er dette akkurat formen du ønsker: én gruppe, ett sett med visuelle alternativer, hundrevis av medlemmer
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
Grp: TXLSXSparklineGroup;
Row: Integer;
begin
Book := TXLSXWorkbook.Create;
try
Book.Open('dashboard.xlsx');
Sheet := Book.Sheets[0];
// One group: every product row shares type and formatting
Grp := Sheet.AddSparklineGroup(xlsxSparklineLine,
'Sheet1!B2:M2', 'N2');
for Row := 3 to 201 do
Grp.Add(Format('Sheet1!B%d:M%d', [Row, Row]),
Format('N%d', [Row]));
Book.SaveAs('dashboard-trends.xlsx');
finally
Book.Free;
end;
end;
TXLSXSparklineType dekker de tre typene Excel tilbyr: xlsxSparklineLine for trendlinjer, xlsxSparklineColumn for små søylediagrammer, og xlsxSparklineStacked for gevinst/tap-striper der hver verdi tegnes som en opp- eller nedblokk. Hvert enkelt minidiagram er bare to strenger — F, det ark-kvalifiserte kildeområdet, og Sqref, cellen symbolet tegnes i — så det er ingenting annet å konfigurere per rad. Grupper kan også bygges helt manuelt via samlingen Worksheet.SparklineGroups når du ønsker å starte fra en tom gruppe i stedet for den sådde standarden
Markører, fargefelt og akseskalering på den typede modellen
TXLSXSparklineGroup eksponerer hele alternativflaten fra Excels Sparkline Tools-bånd som enkle egenskaper. Seks boolske brytere fremhever datapunkter: Markers for hvert punkt på et linje-minidiagram, pluss HighPoint, LowPoint, NegativePoints, FirstPoint og LastPoint. Åtte ARGB-fargefelt kobles med dem — ColorSeries, ColorNegative, ColorAxis, ColorMarkers, ColorFirst, ColorLast, ColorHigh, ColorLow — med den konvensjonen at et felt som står på 0, utelates fra filen, og Excel bruker sin egen standard. Den samme ugjennomsiktige ARGB-formen vises overalt i biblioteket, så $FFD00000 her betyr den samme rødfargen som i betingede formateringsstiler
Grp := Sheet.AddSparklineGroup(xlsxSparklineStacked,
'Sheet1!B2:M2', 'N2');
Grp.NegativePoints := True; // losing months stand out
Grp.ColorNegative := $FFD00000;
Grp.HighPoint := True;
Grp.ColorHigh := $FF00B050;
Grp.MinAxisType := xlsxSparklineAxisGroup; // one scale for all rows
Grp.MaxAxisType := xlsxSparklineAxisGroup;
Grp.DisplayEmptyCellsAs := xlsxSparklineEmptyGap;
Akseegenskapene fortjener litt ettertanke før du godtar standardverdiene. MinAxisType og MaxAxisType tar hver individuell, gruppe- eller tilpasset skalering: individuell strekker hvert minidiagram til sitt eget minimum og maksimum, noe som gjør at en rad som svinger mellom 99 og 101 ser like dramatisk ut som en rad som tredobles. Gruppeskalering plasserer alle medlemmer på en delt vertikal skala, slik at symbolhøyden betyr samme mengde i hver rad — vanligvis det et sammenlignende instrumentpanel ønsker. DisplayEmptyCellsAs bestemmer hva en tom kildecelle gjør med en linje: etterlat et gap, tell som null, eller bro over hullet ved å koble sammen naboene
Hva HotXLS skriver til regnearkets extLst ved lagring
Ved lagring serialiserer HotXLS hver gruppe som et x14:sparklineGroup-element som bærer typen og bryterattributtene, fargefeltene som barnelementer, og en x14:sparklines-liste der medlemmene kobler en xm:f-områdeformel med en xm:sqref-vertscelle. Hele strukturen sitter inni <extLst><ext uri="{05C60535-1F16-4fd2-B633-F4F36F0B64E0}"> på slutten av regnearkdelen, med x14-navnerommet deklarert direkte på blokken, nøyaktig slik Excel skriver det. Et regneark uten minidiagramgrupper sender ikke ut noen extLst i det hele tatt, så filer som aldri har brukt funksjonen kommer ut byte-for-byte identiske med det tidligere HotXLS-versjoner produserte — den samme konservative skrivedisiplinen som er beskrevet i artikkelen om infrastruktur for tapsfri rundreise
En spesifikasjonsdetalj betyr noe hvis du noen gang sammenligner utdata med Excels or kontrollerer XML-en for hånd: standardverdien i skjemaet for lineWeight er 0,75 punkter, ikke 1,25 som enkelte sekundære kilder oppgir — [MS-XLSX] definerer CT_SparklineGroup@lineWeight med en standardverdi på 0,75, noe som samsvarer med vekten Excels brukergrensesnitt faktisk bruker. HotXLS respekterer standardverdien ved utelukkelse: sett LineWeight to noe annet enn 0,75 og attributtet skrives, la det stå på 0,75 og det blir ikke skrevet. Å gjøre dette feil i en av retningene produserer filer som tegnes subtilt tyngre eller lettere enn den samme arbeidsboken lagret fra Excel
Rundreiser, arkkopiering og utvidelser HotXLS ikke modellerer
Åpning er speilbildet av lagring. Når HotXLS åpner a arbeidsbok som inneholder minidiagrammer — enten HotXLS skrev den eller Excel gjorde det — sjekker tolkeren minidiagrammets ext-GUID og gjenoppbygger hver gruppe, medlem, farge og aksealternativ inn i den typede modellen, slik at en åpne→redigere→lagre-syklus bevarer dem fullstendig. Kopiering av et regneark inn i en annen arbeidsbok kloner minidiagramgruppene sammen med resten av arket, noe som gjør maldrevet rapportgenerering enkel: behold et stilisert malark, kopier det per rapport, og pek områdene på nytt
extLst kan også inneholde utvidelsesblokker HotXLS ikke har noen typet modell for — Excel skriver x14-blokker for funksjoner som slicere (utsnitt) og utvidet betinget formatering inn i den samme listen. Siden v2.131.0 blir disse fremmede blokkene bevart ordrett gjennom en rundreise i stedet for å bli slettet: tolkeren fanger dem opp, eksponerer dem som skrivebeskyttet via Worksheet.RawWorksheetExts, og skriver dem tilbake ved lagring, og de reiser med et ark når det kopieres til en annen arbeidsbok. Den bevarte XML-en rekonstrueres fra tolkingshendelser, så den er semantisk ekvivalent med originalen i stedet for byte-identisk, som Excel godtar den og funksjonene overlever. Den praktiske konsekvensen er den som betyr noe i produksjon: å åpne en kundes arbeidsbok og lagre den på nytt fjerner ikke lenger utvidelser du ikke har bedt HotXLS om å forstå
Den ærlige grenselinjen: minidiagrammer tegnes i Excel 2010 og nyere, og i alle andre lesere som implementerer x14-utvidelsen; Excel 2007 viser dataene uten symbolene, noe som er den degraderingen formatet var utformet for å ha. De tre minidiagramtypene, de åtte fargefeltene, bryterne for punkter og de tre aksemodusene dekker hele alternativflaten Excels egen dialogboks tilbyr. Støtte for minidiagrammer, sammen med resten av XLSX-motoren vist her, leveres i HotXLS Delphi Excel Component for Delphi og C++Builder