„HotXLS“ vienu iškvietimu sukuria „Excel“ kibirkštines diagramas (sparklines) — miniatiūrines diagramas, kurias „Excel“ nupiešia viename langelyje — iš Delphi ir C++Builder aplinkų: metodas „TXLSXWorksheet.AddSparklineGroup“ sukuria kibirkštinių diagramų grupę duomenų diapazone, o išsaugant skaičiuoklės failą ji įrašoma kaip x14 plėtinio blokas darbalapio „extLst“ elemente, kurį „Excel 2010“ bei vėlesnės versijos atvaizduoja, o senesnės peržiūros programos tiesiog praleidžia. Jokių diagramų objektų, jokių piešimo dalių, jokių vietos fiksatorių
Scenarijus, kada verta turėti tokias diagramas, visada yra tas pats. Apžvalgos darbalapyje yra keli šimtai eilučių (po vieną kiekvienam produktui, regionui ar sąskaitai), kurių kiekviena turi dvylikos mėnesių rodiklius, ir reikalinga tendencijų piktograma kiekvienos eilutės gale. Jei tai kurtume su realiomis diagramomis, tektų sukurti šimtus „DrawingML“ diagramų dalių, kurių kiekviena turėtų savo XML failą, ryšį bei geometriją, jau nekalbant apie tai, kas nutiktų failo dydžiui ir atidarymo laikui. Kibirkštinių diagramų grupė yra vienas XML blokas, kuris nurodo: „nupiešk mažą liniją iš B2:M2 į N2, ir iš B3:M3 į N3“, pigiai pakartotas tiek eilučių, kiek turite
Kodėl kibirkštinės diagramos yra x14 plėtinys, o ne įprasta diagrama?
Kibirkštinės diagramos atsirado su „Excel 2010“ versija — praėjus trejiems metams po to, kai buvo užfiksuota bazinė ECMA-376 schema, todėl jos negalėjo gyventi pačiame darbalapio žymėjime, nesulaužant esamų peržiūros programų veikimo. „Microsoft“ atsakymas yra plėtinių sąrašo (extension list) mechanizmas: darbalapis gali baigtis „<extLst>“ elementu, turinčiu „<ext>“ blokus, kurių kiekvias pažymėtas URI, identifikuojančiu atitinkamą funkciją ([MS-XLSX] §2.3.6). Kibirkštinės diagramos naudoja URI „{05C60535-1F16-4fd2-B633-F4F36F0B64E0}“ ir „x14“ vardų erdvę. Peržiūros programa, atpažįstanti šį GUID, išanalizuoja bloką; ta, kuri neatpažįsta, privalo jį praleisti. Tai yra visa suderinamumo istorija, ir būtent todėl „Excel 2007“ atidaro tokius failus švariai — tiesiog parodo pradinius skaičius be diagramų
Vieną mechanizmo detalę verta paminėti, nes ji prieštarauja įprastai prielaidai: darbalapio šakniniame elemente nereikia jokios „mc:Ignorable“ deklaracijos. Pačio „ext“ GUID filtro visiškai pakanka, o pati „Excel“ deklaruoja „x14“ vardų erdvę vietoje „<ext>“ elemente, užuot lietusi šakninį elementą. „HotXLS“ naudoja tą patį šabloną, todėl likusi darbalapio XML dalis lieka nepaliesta. Tai taip pat yra struktūrinis skirtumas nuo realių diagramų: įprasta diagrama yra atskira „DrawingML“ dalis su savo atvaizdavimo konvejeriu (aprašyta straipsnyje apie diagramas, vaizdus ir brėžinius), tuo tarpu kibirkštinė diagrama yra darbalapio metaduomenys, kuriuos nupiešia pats lentelės tinklelis
Kaip programiškai pridėti kibirkštines diagramas į XLSX failą?
„TXLSXWorksheet.AddSparklineGroup(AType, ASourceRange, ALocation)“ yra vieno iškvietimo kelias: jis sukuria nurodyto tipo grupę, suteikia jai numatytąją „Excel“ sekos spalvą ir pradefa pirmąją kibirkštinę diagramą, susiejančią nurodytą duomenų diapazoną su langeliu. Gautas objektas „TXLSXSparklineGroup“ priima daugiau diagramų per metodą „Add“ (po vieną „F“/„Sqref“ porą kiekvienai eilutei), kurios visos dalinasi bendru grupės tipu bei formatavimu. Mūsų apžvalgos scenarijui tai yra būtent tai, ko reikia: viena grupė, vienas vizualių nustatymų rinkinys ir šimtai narių
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;
Žymekliai, spalvos ir ašių mastelis tipiniame modelyje
„TXLSXSparklineGroup“ pateikia visus nustatymus iš „Excel“ kibirkštinių diagramų įrankių juostos kaip paprastas savybes. Šeši loginiai jungikliai pabrėžia duomenų taškus: „Markers“ kiekvienam linijos taškui, taip pat „HighPoint“, „LowPoint“, „NegativePoints“, „FirstPoint“ ir „LastPoint“. Aštuonios ARGB spalvų vietos suporuotos su jais — „ColorSeries“, „ColorNegative“, „ColorAxis“, „ColorMarkers“, „ColorFirst“, „ColorLast“, „ColorHigh“, „ColorLow“. Jei spalva paliekama lygi 0, ji neįrašoma į failą ir „Excel“ taiko savo numatytuosius nustatymus. Ta pati pilnai nepermatoma ARGB forma naudojama visoje bibliotekoje, todėl „$FFD00000“ čia reiškia tą pačią raudoną spalvą, kaip ir sąlyginio formatavimo stiliuose
Ašies savybes verta apgalvoti prieš priimant numatytąsias reikšmes. „MinAxisType“ ir „MaxAxisType“ priima individualų, grupinį arba pasirinktinį mastelio skaičiavimą: individualus ištempia kiekvieną diagramą iki jos pačios minimumo bei maksimumo, todėl eilutė, svyruojanti tarp 99 ir 101, atrodo taip pat dramatiškai, kaip eilutė, kurios reikšmės patrigubėja. Grupinis mastelio skaičiavimas patalpina visus narius į vieną bendrą vertikalią skalę, todėl piktogramos aukštis reiškia tą patį kiekį kiekvienoje eilutėje — būtent tai, ko paprastai reikia palyginamajame darbalapyje. Savybė „DisplayEmptyCellsAs“ nustato, ką tuščias langelis daro su linija: palieka tarpą, laiko nuliu ar sujungia kaimyninius taškus
Ką HotXLS įrašo į darbalapio extLst išsaugant
Išsaugant failą, „HotXLS“ nuoseklina (serialize) kiekvieną grupę kaip „x14:sparklineGroup“ elementą, turintį tipo bei jungiklių atributus, spalvų dalis kaip antrinius elementus ir „x14:sparklines“ sąrašą, kurio nariai suporuoja diapazono formulę „xm:f“ su pagrindiniu langeliu „xm:sqref“. Visa struktūra patalpinama „<extLst><ext uri="{05C60535-1F16-4fd2-B633-F4F36F0B64E0}">“ dalyje darbalapio pabaigoje, su „x14“ vardų erdve, deklaruota pačiame bloke, tiksliai taip, kaip rašo „Excel“. Darbalapis be kibirkštinių diagramų grupių išvis nesukuria „extLst“ elemento, todėl failai, kurie nenaudojo šios funkcijos, išlieka identiški ankstesnių „HotXLS“ versijų kurtiems failams — tai ta pati konservatyvaus rašymo disciplina, aprašyta straipsnyje apie saugų informacijos išsaugojimą (lossless round-trip)
Viena specifikacijos detalė svarbi, jei kada nors lyginsite rezultatą su „Excel“ generuotu failu arba tikrinsite XML: numatytasis „lineWeight“ storis schemoje yra 0.75 taško, o ne 1.25, kaip teigia kai kurie kiti šaltiniai — [MS-XLSX] apibrėžia „CT_SparklineGroup@lineWeight“ su numatytąja 0.75 reikšme, atitinkančia storį, kurį taiko pati „Excel“ vartotojo sąsaja. „HotXLS“ gerbia šią taisyklę: nustatykite „LineWeight“ į bet kokią kitą reikšmę nei 0.75, ir atributas bus įrašytas, palikite 0.75 — ir jis bus praleistas. Suklydus šioje vietoje, linijos bus atvaizduojamos šiek tiek storesnės arba plonesnės nei „Excel“ išsaugotame faile
Informacijos išsaugojimas, lapų kopijavimas ir plėtiniai, kurių HotXLS nemodeliuoja
Atidarymas yra atvirkštinis išsaugojimo procesas. Kai „HotXLS“ atidaro failą su kibirkštinėmis diagramomis (nesvarbu, ar jį įrašė „HotXLS“, ar „Excel“), analizatorius pagal GUID atpažįsta diagramų plėtinį ir atkuria kiekvieną grupę, narį, spalvą bei ašies nustatymą į tipinį modelį, todėl atidarymo-redagavimo-išsaugojimo ciklas jas visiškai išlaiko. Darbalapio nukopijavimas į kitą failą nukopijuoja ir kibirkštinių diagramų grupes kartu su likusia lapo dalimi, kas daro šablonais paremtą ataskaitų generavimą paprastą: turėkite suformuotą šabloninį lapą, nukopijuokite jį ataskaitai ir pakeiskite duomenų diapazonus
„extLst“ elemente taip pat gali būti plėtinių blokų, kuriems „HotXLS“ neturi sukurto modelio — pavyzdžiui, „Excel“ į tą patį sąrašą įrašo x14 blokus tokioms funkcijoms kaip filtrai (slicers) ar išplėstinis sąlyginis formatavimas. Nuo v2.131.0 versijos šie svetimi blokai yra išlaikomi nepakeisti viso ciklo metu, užuot juos išmetus: analizatorius juos užfiksuoja, pateikia tik skaitymui per „Worksheet.RawWorksheetExts“ ir įrašo atgal išsaugant. Jie taip pat keliauja kartu su lapu, kai jis kopijuojamas į kitą failą. Išsaugotas XML yra atkuriamas iš analizatoriaus įvykių, todėl jis yra semantiškai lygiavertis originalui, nors baitas į baitą nesutampa. „Excel“ jį priima, o funkcijos išlieka. Praktinė pasekmė yra ta, kad atidarius kliento failą ir jį iš naujo išsaugojus, nebebus prarandami tie plėtiniai, kurių „HotXLS“ tiesiogiai nesupranta
Teisinga riba: kibirkštinės diagramos rodomos tik „Excel 2010“ ir vėlesnėse versijose bei kitose peržiūros programose, kurios realizuoja x14 plėtinį; „Excel 2007“ rodo tik duomenis be pačių diagramų, ir būtent taip šis formatas buvo suprojektuotas veikti. Trys kibirkštinių diagramų tipai, aštuonios spalvų vietos, taškų jungikliai ir trys ašies režimai apima visus nustatymus, kuriuos siūlo pati „Excel“. Kibirkštinių diagramų palaikymas, kartu su likusiu XLSX varikliu, tiekiamas „HotXLS Delphi Excel Component“ komponente, skirtame Delphi ir C++Builder