HotXLS zadržava izvorni ChartML uvezenog Excel grafikona i reproducira ga bajt po bajt kad se ništa u tipkanom modelu nije promijenilo, pa otvaranje i ponovno spremanje radne knjige ne tiho ne uklanja dijelove grafikona koje objektni model ne prikazuje. Uredite naslov, seriju ili os i HotXLS strukturno spaja nove tipkane čvorove u izvorno stablo umjesto da grafikon iznova generira iz početka
Upravo ta razlika, reprodukcija kad je netaknut, spajanje kad je uređen, čini Delphi aplikaciju sigurnom za usmjeravanje na grafikone koje je analitičar izgradio u Excelu. Ponovno generiranje grafikona iz tipkanog modela uvijek gubi ono što model ne zna, a Excelovi grafikoni puni su stvari koje knjižnica ne zna: prilagođeni stilovi, popisi proširenja, grane alternativnog sadržaja, formatiranje kvalificirano prostorom imena iz dodataka
Zašto ponovno spremanje radne knjige spljošti svoje grafikone?
Zato što uobičajena implementacija čita što razumije i zapisuje što razumije. Sve između, extLst iz novije Excel izvedbe, grana mc:AlternateContent, efekt oblika za koji model nema svojstvo, postoji u datoteci, nema dom u objektnom modelu i nestaje u vrijeme spremanja. Korisnik vidi grafikon koji je izgubio svoj gradijent, prilagođene natpise podataka ili 3D efekt, a radna knjiga ne može objasniti zašto
S PreserveUnsupportedParts omogućenim na radnoj knjizi, HotXLS pohranjuje izvorne UTF-8 bajtove grafikona pri uvozu uz duljinu i 64-bitni otisak modeliranog sadržaja. Ako se tipkani model nije promijenio do vremena spremanja, zapisuje izvorne bajtove natrag. Bez preuređivanja XML-a, bez drifta bjeline, bez rezidentne UTF-16 kopije grafikona koja visi u memoriji za grafikon koji nitko nije uredio
var
Workbook: TXLSXWorkbook;
Chart: TXLSXChart;
begin
Workbook := TXLSXWorkbook.Create(nil);
try
Workbook.PreserveUnsupportedParts := True; // set before Open
Workbook.Open('quarterly-review.xlsx');
Chart := Workbook.Sheets[1].Charts[0]; // Sheets[] is 1-based
if Chart.HasPreservedXml then
Log('original ChartML retained; untouched charts replay exactly');
Chart.Title := 'Revenue by region, Q3 2026'; // now the merge path runs
Workbook.SaveAs('quarterly-review-out.xlsx');
finally
Workbook.Free;
end;
end;
Što spajanje čuva, a što posjeduje model
Pravilo je vlasništvo. Javni čvorovi modela, naslov, serije, predmemorije, grupe crtanja, osi, odlučuje novo generirano stablo. Nemodelirana podstabla prenose se iz izvornog. Ta asimetrija je namjerna i njoj je potrebno trenutak da se internalizira: brisanje serije ne smije uskrsnuti staru seriju iz pohranjenog XML-a, pa se sve što model posjeduje uzima iz modela i onda kad model kaže nestalo
Sadržaj bez vlasnika ponovno se umeće uz praćene čvorove uz koje je sjedio, a extLst ostaje zadnji unutar svog roditelja jer tamo to shema zahtijeva. Brisanje poznatog svojstva, uklanjanje oznake podebljanja, ispuštanje boje, tretira se kao brisanje, a ne kao praznina koju treba popuniti iz izvornog stabla. Nepoznati atributi u istom susjedstvu zadržavaju svoje mjesto
Sadržaj kompatibilnosti oznake dobiva specifično rukovanje. Pri raščlambi, HotXLS preskače mc:Choice i čita mc:Fallback; ako ta grana padanja omata grupu crtanja koju model poznaje, spajanje zapisuje novi tipkani sadržaj natrag u podstablo pada. Bez tog koraka spremanje bi emitiralo novu grupu crtanja i ostavilo staru unutar pada, a grafikon bi nosio dvije
Isoključivanje jednog grafikona
ClearPreservedXml ispušta izvorni XML i otisak za jedan grafikon, pa sljedeće spremanje ponovno izgrađuje taj grafikon isključivo iz tipkanog modela. To je odluka po grafikonu; svojstvo na razini radne knjige PreserveUnsupportedParts i dalje upravlja time gradi li se stanje očuvanja pri uvozu
Posegnite za njim kad želite čist grafikon, a ne vjeran, primjerice kad grafikon predloška nosi formatiranje iz stare korporativne teme i smisao je operacije odbaciti ga. Ne posegnite za njim kao refleksom otklanjanja problema: grafikon koji se nakon uređivanja renderira pogrešno češće je pitanje modeliranja nego pitanje očuvanja, a brisanje pohranjenog XML-a uništava dokaz
Kombinirani grafikoni i druga os
AddPlotGroup izgrađuje uređene kombinirane grafikone, gdje svaka grupa crtanja zadržava vlastitu obitelj grafikona i vlastitu dodjelu primarne ili sekundarne osi. To je ono što svima prisutan poslovni grafikon treba: prihod kao stupci na lijevoj osi, postotak marže kao crta na desnoj
Grafikoni izlažu primarne i sekundarne osi kategorija i vrijednosti te os serija, s tipkanim postavkama kategorije, vrijednosti, datuma i osi serija koje pokrivaju pozicije, identifikatore, križanja, jedinice datuma, intervale natpisa i vidljivost. Stariji ravni API, ChartType, AddSeries, ravna kolekcija Series, i dalje adresira primarnu grupu crtanja, pa postojeći kod nastavlja raditi dok model ispod drži svaku uređenu grupu
var
Chart: TXLSXChart;
Line: TXLSXChartPlotGroup;
begin
// Column chart anchored over rows 1..15, columns 5..12
Chart := Sheet.Charts.Add(xlsxChartColumn, 'Revenue and margin',
1, 5, 15, 12);
Chart.AddSeries('Revenue', 'Data!$A$2:$A$13', 'Data!$B$2:$B$13');
// Second plot group: a line, read against the secondary value axis
Line := Chart.AddPlotGroup(xlsxChartLine, xlsxAxisSecondary);
Line.AddSeries('Margin %', 'Data!$A$2:$A$13', 'Data!$C$2:$C$13');
end;
Prije nego što je ovaj model postojao, otvaranje i ponovno spremanje kombiniranog grafikona urušavalo bi ga u jednu obitelj grafikona i gubilo sekundarne, datumske osi i osi serija. Referentni formule grafikona i predmemorirane vrijednosti serija sada preživljavaju kopije radne knjige i cikluse otvaranja i spremanja jednako tako, a sidra grafikona podudaraju se sa svojim dijelovima grafikona po identifikatoru odnosa, tako da aplikacija koja preuređuje unose odnosa više ne mijenja sadržaj grafikona između pozicija radnog lista
Zamka ručnog rasporeda
Ako ručno pozicionirate područje crtanja, naslov, naslov osi ili legendu, zapišite sve četiri koordinate. Office zahtijeva x, y, w i h kao potpunu grupu kad god je ijedan od njih prisutan, inače zanemaruje cijeli manualLayout. HotXLS uvijek emitira puni pravokutnik iz tog razloga, a SetPositionAndSize postavlja i omogućuje ga jednim pozivom
Dvije dodatne pojedinosti slijede Excel, a ne punu slobodu specifikacije. Pozicija se zapisuje s xMode i yMode postavljenim na edge, dok veličina koristi factor za wMode i hMode, jer to zapisuje Excel i u što pretvara druge kombinacije. A layoutTarget emitira se samo za područje crtanja, nikad za naslove ili legende, gdje napomene Microsoft implementacije to zabranjuju
Uklapanje ovoga u povratni put radne knjige
Očuvanje grafikona jedan je primjer opće politike: knjižnica koja uređuje dokumente autorizirane drugdje treba promijeniti ono što je zatraženo i ništa drugo. Isti razlog pokreće HotXLS na temama, lanceima izračuna i proširenjima radnih listova, opisano u bilješkama o bezgubitnim povratnim putovima za temu, extLst i calcChain te o VBA projektima i vanjskim poveznicama u očuvanju VBA i vanjskih poveznica. Za samu površinu autorstva grafikona, stvaranje grafikona, smještanje slika i crteža iz Delphija, pogledajte prikaz grafikona, slika i crteža u HotXLS-u
HotXLS čita, uređuje i zapisuje XLSX grafikone iz izvornog Delphi i C++Builder koda bez instalacije Excela na stroju, što je vjernost čini problemom knjižnice, a ne problemom automatizacije. Na stranici HotXLS komponente proračunskih tablica nalazi se popis značajki grafikona i probno preuzimanje