UPRAVLJANJE S SLOGI

Ob pripravi predlog se kmalu pojavijo vprašanja, kot so: Kje se slogi hranijo? Kaj so privzeti slogi? Kako jih lahko spremenim? Kako v obstoječe dokumente vrinem svoje sloge? V nadaljevanju so odgovori na nekatera od teh vprašanj.

Slogi dokumenta so vedno shranjeni v samem dokumentu (datoteki s končnico .docx ali .docm). Slogi dokumenta v nasprotju s prepričanjem marsikoga niso shranjeni v predlogi dokumenta (končnice .dotx in .dotm). Kaj pa je potem vloga predloge dokumenta? In kakšna je vloga predloge Normal.dot, ki je v izvedbi 2007 postala Normal.dotm?

Mimogrede, to »privzeto« predlogo, na podlagi katere nastane nov prazen dokument vsakič, ko kliknete izvršljivo datoteki winword.exe,Word ob zagonu naredi v uporabnikovem profilu (%userpofile%\Microsoft\Templates ali %userprofile%\Microsoft\Predloge, pač odvisno od jezika) , če je tam ne najde. To je ena redkih reči, ki jih Word dobesedno »naredi«. Večino drugih za uporabnika »privzetih« datotek prekopira iz kake lokacije izpod mape namestitve (običajno C:\Program Files\Microsoft Office), nekatere pa, če sem prav dojel, posodobi celo iz interneta.

No, tako Normal.dotm kot kaka eventualna druga predloga služi (običajno) le kot vir, iz katerega se prekopirajo slogi v dokument. Po izvedenem kopiranju povezave med slogi v predlogi in slogi v dokumentu ni več. In kdaj pride do kopiranja slogov iz predloge v dokument? Odvisno od nastavitve, ki se skriva na zavihku Razvijalec/ Predloga dokumenta (slika 1), ki ga lahko uporabimo tudi za zamenjavo predloge (o tem, zakaj bi to sploh želeli, nekoliko pozneje).

Ali naj se slogi iz predloge v dokument kopirajo ob vsakem odpiranju dokumenta?

Če je na tem mestu kljukica pri možnosti »Samodejno posodobi sloge dokumenta«, se bodo slogi iz predloge prekopirali ob vsakem odpiranju dokumenta. Če te kljukice ni (kar je privzeta nastavitev), se bodo slogi iz predloge v dokument prekopirali samo ob nastanku novega dokumenta. Torej potem, ko je dokument narejen, slogi v dokumentu in slogi v predlogi nimajo več nobene povezave. Lahko pa naknadno odkljukate prej omenjeno možnost in Word bo ob vsakem odpiranju dokumenta (ali menjavi predloge) prekopiral sloge iz predloge.

Privzeto je nastavitev izklopljena. Bilo bi namreč hudo begajoče, če bi dokument, ki ima to odkljukano (in npr. temelji na predlogi Normal.dotm), poslali kolegu, ki ima drugačen slog Normal.dotm. Ko bi ga odprl, bi se njegovi slogi prekopirali v dokument, in precej vprašljivo je, kako bi bila stvar videti. In verjetno bi sledilo glasno nerganje na temo »zmešanega programa«.

Še opomba: Sloge v predlogi lahko naredite ali spremenite na dva načina – ob urejanju dokumenta, ki temelji na predlogi, ali pa z urejanjem predloge same. Prva možnost je, da ob urejanju dokumenta izdelamo nov ali spremenimo obstoječ slog in v okencu za posodabljanje sloga izberemo spet nekoliko nenavadno prevedeno izbiro »Novi dokumenti temeljijo na tej predlogi«. Word tako sloga ne bo dodal oz. spremenil samo v trenutnem dokumentu, ampak tudi v predlogi tega dokumenta. Zato bo ob shranjevanju tudi vprašal, ali naj posodobi (tudi) predlogo trenutnega dokumenta (pri večini uporabnikov je to najpogosteje Normal.dotm). Drugi način pa je, da odprete datoteko s predlogo (ki ima podaljšek .dotx oz. .dotm, če vsebuje tudi programsko kodo) in jo urejate, kot sicer urejate vsak drug dokument.

KAJ SO HITRI SLOGI

Tako, zdaj je najbrž nekoliko jasneje, kje slogi »živijo«. Da pa bo stvar pestrejša, je Word 2007 prinesel še dodatno možnost – t. i. Hitre sloge (Quick Styles). Ti niso nič posebnega, naredite jih kot katerikoli drug slog, le »živijo« lahko ne samo v predlogi oz. dokumentu, ampak še v posebni datoteki .dotx, ki jo Word privzeto hrani v %userprofile%\Application data\Microsoft\QuickStyles. Že ko izdelujete slog, določite, ali naj posamezen slog spada v nabor hitrih slogov ali ne. Če spada, potem ga lahko shranite v nabor hitrih slogov, kot je zapisano zgoraj. Tak nabor potem lahko »naložite« v drug dokument, ne da bi mu zamenjali predlogo. Khm. Za moj okus precej zmede, saj hitri slogi deloma podvajajo vlogo, ki jo imajo slogi iz predloge.

Vendar je ne podvajajo v celoti, saj med hitre sloge lahko spravite samo sloge odstavka in znaka, ne pa tudi sloge seznamov in tabel. Po drugi strani pa imajo nabori hitrih slogov vsaj eno posebnost, ki jo sam s pridom uporabljam in je po mojem vedenju predloge nimajo – hranijo namreč tudi privzete lastnosti dokumenta. Stvar pride prav, kadar usklajujete obstoječe dokumente s celostno grafično podobno (CGP). Pri tem je nujno nastaviti tudi privzete lastnosti. In z menjavo predloge se jih ne da. Lahko »peš«, lahko pa z uveljavljanjem lastnega nabora hitrih slogov.

SLOGI TABEL

Tabele v programih Office 2007 (Word, Excel, PowerPoint) so z vidika uporabniškega vmesnika in deloma tudi funkcionalnosti precej poenotene. Zaradi izboljšave uporabnosti slogov tabele so vpeljani elementi tabele, in za vsako tabelo lahko uporabnik s preprostimi kljukicami (kartica na zahtevo Orodja za tabele/ Načrt, Skupina Slogovne možnosti tabele, glej sliko 2) označi, katere elemente konkretna tabela vključuje (na primer, ali je to tabela, ki ima naslovno vrstico ali ne). Možne vrednosti so Naslovna vrstica, Vrstica z rezultati, Prvi stolpec in Zadnji stolpec, potem pa še izbira, ali naj bodo stolpci izmenoma različni in ali naj bodo vrstice izmenoma različne (sicer je možno opredeliti tudi »debelino« te izmene – tako sta lahko dva stolpca ene sorte, potem dva stolpca druge, potem spet dva prve itd). In za vsakega od teh elementov je mogoče v slogu tabele posebej nastaviti (vsaj za Word) skoraj vse, kar si človek lahko izmisli.

Slogovne možnosti tabele

Ostane le še, da uporabnike navadimo na uporabo slogov tabel. Tipično pa pri uporabi slogov tabel nastane zmeda takrat, ko uporabniki ne vedo, da se nastavitve sloga tabele uporabijo samo za tiste dele, ki nimajo nastavljenega sloga znaka ali odstavka oz. ročnega oblikovanja (glej prejšnji članek).

Torej je dobro uporabnika navaditi na poenostavljen vrstni red, ki ne povzroči zmede – vstavi tabelo, vpiši vsebino, označi uporabljene slogovne možnosti (elemente), nastavi želen slog tabele, in šele potem »čaraj« naprej s kakim ročnim oblikovanjem, če je res potrebno (običajno ni, če smo le dobro pripravili slog).

Ko sem se dejansko lotil opredelitve sloga tabele skozi uporabniški vmesnik, ki ga ponuja v ta namen Word, sem ugotovil, da je neroden, pa še nekatere možnosti sem pogrešal. Tako npr. v pregledu sloga tabele vidimo, da je ena od lastnosti sloga tudi jezik tabele, vendar Wordov uporabniški vmesnik tega ne pusti nastaviti. Nerodno. Potencialni rešitvi sta vsaj dve, opisal bom obe, ker je tako luštno mesto za vstop v »višje sfere«.

Visual Basic for Applications (VBA)
Prva možnost je opredelitev sloga s »programiranjem«. MS je predvidel možnost dopolnjevanja Officeove funkcionalnosti s »programiranjem« v Visual Basic for Applications (t. i. makro ukazi) ali pa z Visual Studiem kot razvojnim orodjem, nekaterimi dodatki in s poljubnim jezikom, ki ga VS podpira. Najprej sem se lotil jezika VBA, ki je »vgrajen« in tako ne potrebuje posebnega orodja in pripadajoče licence, pa še »interaktiven« je, tako da lahko človek sproti vidi, kaj je ušpičil.

Če želimo uspešno uporabljati »makro ukaze«, se lahko stvari lotimo po dveh poteh: ali posnamemo makro in ga analiziramo (kar utegne biti zelo mučna zadeva, saj snemalnik »izdela« večinoma delujočo, ne pa tudi optimalno, še manj pa berljivo kodo) ali pa naštudiramo objektni model in potem ukaze – oh, kako staromodno – pišemo.

Pri shranjevanju dokumentov z makro ukazi je treba biti nekoliko pozoren in dokument shraniti s podaljškom .docm oz. predlogo s podaljškom .dotm. Če tega ne storimo, Word z dokumentom ne shrani tudi kode. Če boste kodo že spisali, se jo splača tudi podpisati s kvalificiranim digitalnim potrdilom, ki ima opredeljen tudi namen podpisovanja kode, za katerega nastavite, da mu zaupate (tema za drug članek, na kratko pa to pomeni npr. digitalno potrdilo SIGEN-CA in klik izbire Tools/ Digital Signature/ Izbira v urejevalniku VBA kode – glej sliko 3). Tako Word ob vsakem odpiranju dokumenta s kodo ne bo spraševal, če naj dovoli izvajanje kode (če le to dovolite v Wordove možnosti/ Središče zaupanja/ Nastavitve središča zaupanja/ Onemogoči vse makre razen elektronsko podpisanih).

Podpisovanje kode v dokumentu ali predlogi

Pri poskusu nastavitve jezika tabele način s snemanjem odpade, saj ni uporabniškega vmesnika, torej snemalnik makro ukazov tudi teoretično ne more posneti tega ukaza. Prisežem, ko sem prišel do te ugotovitve, sem se močno prestrašil. Zadnji stik s programiranjem sem imel pred približno 15 leti, in že takrat sem delal v zame skorja nedojemljivo supermodernem in zapletenem okolju Delphi. No, stvar ni tako tragična. Microsoft ima zbrane zelo veliko večinoma zgledno zapisane spletne dokumentacije (za Word 2007 glej npr. http://msdn.microsoft.com/sl-si/library/dd146899(en-us).aspx in okoliške povezave). Sam sem potreboval nekaj ur, da sem se navadil dela z dokumentacijo, pa še nekaj ur, da sem dojel bistvene pripomočke razvojnega okolja (kot so npr. samodokončaj – autocomplete oz. Intellisense), toda potem so se mi odprla nova obzorja.
In sem spisal svojo prvo relevantno vrstico za pripravo slogov tabel, ki se je glasila nekako takole:

Sub NastaviJezik()
Styles.Item("ImeSlogaTabele").LanguageID = wdSlovenian
End Sub

Mimogrede še za tiste, ki so do zdaj sloge že resno vzeli: Da bi si »naredil red v glavi« in laže razumel organiziranost in oblikovanje obstoječih slogov (glej zapis iz preteklega meseca), sem takoj prekopiral zgled z MSDN in ga malo »priredil« ter dobil kratek makro, ki izdela seznam vseh slogov skupaj z nastavitvami, pri čemer jih razvrsti po tipu. Za profesionalne programerje je verjetno spodnja koda amaterska, a deluje (če imate Word nastavljen na slovenščino, sicer popravite imeni slogov Naslov 1 in Naslov 3 na Heading 1 in Heading 3).

Sub IzpisSlogov ()
Dim docActive As Document
Dim docNew As Document
Dim styleLoop As Style
Dim styleTypeLoop As Long
Dim nameRange As Range

Set docActive = ActiveDocument
Set docNew = Documents.Add

For styleTypeLoop = 1 To 4
Select Case styleTypeLoop
Case 1
styleTypeName = "Slog odstavka"
Case 2
styleTypeName = "Slog znaka"
Case 3
styleTypeName = "Slog tabele"
Case 4
styleTypeName = "Slog seznama"
End Select

Set nameRange = docNew.Range
nameRange.SetRange Start:=docNew.Range.End, End:=docNew.Range.End
'vstavi tip sloga
nameRange.InsertAfter (styleTypeName) & vbCrLf
nameRange.Style = Styles.item("Naslov 1")

For Each styleLoop In docActive.Styles
If styleLoop.Type = styleTypeLoop Then
With nameRange
'vstavi ime sloga
.SetRange Start:=docNew.Range.End, End:=docNew.Range.End
.InsertAfter Text:=styleLoop.NameLocal & Chr(9) & vbCrLf
.Style = Styles.item("Naslov 3")
'izpiši nastavitve sloga
.SetRange Start:=docNew.Range.End, End:=docNew.Range.End
.InsertAfter styleLoop.Description
.InsertParagraphAfter
End With
End If
Next
Next
End Sub

Rezultat je videti kot na sliki 4.

Seznam slogov in njihove lastnosti

Lahko pa ga pogledam tudi skozi ogled orisa (slika 5), ki mi doda nekaj strukture:

Seznam slogov in njihove lastnosti v pogledu orisa

Druga taka lastnost, ki se je ne da nastaviti skozi Wordove nastavitve, je vrstni red slogov tabel. Načeloma se vrstni red slogov nastavlja prek okna Upravljanje slogov, a iz meni neznanih razlogov je ob izbiri sloga tabele možnost »siva« (glej sliko 6).

Vrstnega reda slogov tabel ni mogoče nastaviti.

Tudi to bi lahko nastavil z uporabo objektnega modela (z nastavljanjem lastnosti Styles.Item(»Ime sloga«).Priority ). Pa ne bom. Tokrat bom pokazal, kako se isto morda še laže naredi prek neposrednega urejanja ustrezne datoteke .xml znotraj dokumenta .docx.

Namreč, Office 2007 je prinesel nov zapis datotek programov Office 2007. Tako so v resnici datoteke za Wordove, Excelove in PowerPointove dokumente in predloge stisnjene (zip) množice datotek XML (no ja, tudi kaka datoteka druge vrste se najde – npr. slike v dokumentu ali predlogi, pa nekatere ikone ipd.). Te datoteke XML je mogoče (in je to včasih tudi najpreprosteje) urejati s preprostim urejevalnikom (lahko tudi Notepad, čeprav je meni precej bolj povšeči kak urejevalnik, ki razume sintakso XML. Sam uporabljam »zastonjski« PSPad (www.pspad.com/), tisti bolj vajeni Microsoftovega programja lahko uporabljajo tudi SharePoint Designer, ki je že od aprila naprej zastonj.

In kako do ustrezne datoteke .xml? Preprosto. Datoteki, ki jo hočem urediti (npr. test.docx), dodam končnico .zip, tako da postane test.docx.zip. Nato uporabim program, ki zna delati s stisnjenimi datotekami. Sam sem delal kar s t. i. stisnjenimi mapami (compressed folders), ki so že vgrajene v Windows XP.

Morda bo komu namesto vsega tega šarjenja ljubši PackageExplorer, pri katerem preimenovanje in raztegovanje ni več potrebno (http://packageexplorer.codeplex.com/) ali pa Cs3OpenXmlManager (http://cs3openxmlmanager.codeplex.com/), ki pa imata kljub očitni prednosti (ni šarjenja z datoteko .zip) tudi nekatere boleče pomanjkljivosti. A o tem naj sodi vsak sam.

Pri raziskovanju datotek novih formatov je treba poznati tudi »predpise«. To pomeni, da se splača poiskati ustrezen standard – lahko kar s spletnega mesta ISO, na katerem so štirje »kosi«, in sicer OOXML ISO/IEC 29500-1:2008, ISO/IEC 29500-2:2008, ISO/IEC 29500-3:2008 in ISO/IEC 29500-4:2008, ki jih je moč sneti s http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html. Za naše namene je zanimiv predvsem prvi. Žal je celoten standard precej dolg in ne prav pregleden. Pokriva pa tako »standard« za zapis dokumentov (Wordprocessing ML), kot preglednic (Spreadsheet ML), predstavitev (Presentation ML) in risb (Drawing ML). Morda nekoliko bolj preglednejšo različico (nekaj dodatnih povezav po PDF-ju sem in tja) pa najdete na http://openxmldeveloper.org/default.aspx. Četrti del vsebuje za naš namen pomembno večino informacij. Ta referenčna knjižica obsega zajetnih 5500 strani. A ne ustrašite se. To je referenčni material. Saj ni treba ravno vsega prebrati. Le na poljuben vam domač način se splača dokument poindeksirati, sicer je lahko iskanje po njem (npr. standardni »Search« v PDF-bralniku) precej dolgotrajno.

Nazaj k nalogi. Rad bi popravil vrstni red prikaza slogov tabele. Tokrat gre torej za Wordovo .docx datoteko. Dodam končnico .zip, jo odprem in na namizje potegnem datoteko styles.xml iz podmape word (iz imen datotek se da hitro uganiti njihov namen, lahko pa namen poiščemo v zgoraj navedenih »knjižicah«). Ko bom končal s popravljanjem, jo bom preprosto potegnil nazaj na isto mesto.
Datoteko odprem v urejevalniku. Ker vsebina privzeto ni urejena v skladu s strukturo, reformatiram vsebino (če le nisem izbral Beležnice, ki te funkcije ne pozna) in dobim pregledno XML datoteko (slika 7).

Pregledna XML datoteka styles.xml

Poiščem zapis (iskanje imena sloga), ki opredeljuje slog tabele, ki ga želim popravljati. Najprej so vsi slogi našteti, drugi zadetek pa je že pravi. Začne se nekako takole:

<w:style w:type="table" w:customStyle="1" w:styleId="CGPCorpBesediloPoudarek1">
<w:name w:val="CGP Corp Besedilo (Poudarek 1)"/>
<w:basedOn w:val="Navadnatabela"/>
<w:qFormat/>
<w:rsid w:val="003D60C7"/>
<w:pPr>
<w:suppressAutoHyphens/>
<w:spacing w:after="0" w:line="240" w:lineRule="auto"/>
<w:jc w:val="left"/>
</w:pPr>
<w:rPr>
<w:rFonts w:asciiTheme="majorHAnsi" w:hAnsiTheme="majorHAnsi"/>
<w:sz w:val="20"/>
</w:rPr>
<w:tblPr>
<w:jc w:val="center"/>
<w:tblInd w:w="0" w:type="dxa"/>
<w:tblBorders>
<w:insideH w:val="single" w:sz="4" w:space="0" w:color="AAAAAA"/>
</w:tblBorders>

Če malo preberem, je precej jasno, kaj piše. Če mi kaj ni jasno, hitro poiščem v zgoraj omenjeni referenčni literaturi. Tako hitro ugotovim, da slog temelji na slogu navadne tabele, da so nastavljene lastnosti odstavka za celo besedo tako, da znotraj tabele ni dovoljeno deljenje besed, da po odstavku ni predvidenega odmika od naslednjega, da je razmik med vrsticami odstavka 240 (pri čemer se podaja v 1/240-tinkah višine vrstice – kje najdejo enote, mi ni čisto jasno, a včasih so prav zabavne), da je poravnava v tabeli privzeto leva in tako naprej. Nič zelo pretresljivega. V nadaljevanju sledijo lastnosti za druge »elemente« oz. slogovne možnosti tabele. Če za kak element kaka lastnost ni nastavljena, velja tudi zanj nastavitev iz dela za celotno tabelo. Če tudi tam ni nastavljena, velja nastavitev iz sloga, na katerega se aktualni slog sklicuje, in če še tam ni, veljajo privzete lastnosti dokumenta.

Po malo brskanja po referenčni literaturi hitro najdem, da ima tabela lahko tudi lastnost <w:uiPriority w:val="1"/>, ki opredeli tisto, kar sem želel na začetku – to je vrstni red prikazovanja slogov tabel v seznamu ali galeriji slogov. Vnos w:val="1" seveda pomeni, da bo slog prvi med enakimi. Vrstico vrinem med splošne lastnosti, t.j. za <w:basedOn w:val="Navadnatabela"/>, shranim styles.xml, ga potegnem nazaj v .docx, pobrišem podaljšek .zip, dvakrat kliknem tako nastalo datoteko, naredim tabelo, pogledam slog in – izbrani slog je prvi na seznamu (slika 8).

Tretji slog s slike 2 je zdaj prvi v galeriji slogov tabel.

Vem, videti je precej dela za droben rezultat. Vendar gre vse od tu naprej po istem (ali pa vsaj podobnem) kopitu. In naslednjič se bomo lotili izdelave več slogov tabel v Wordu (kar sicer lahko pridelamo skozi uporabniški vmesnik, vendar je kopiranje in popravljanje enega videza včasih preprosteje), pa potem istih tabel v Excelu in v PowerPointu. Slednji pa uporabniškega vmesnika za izdelavo slogov tabel sploh nima, in je neposredno šarjenje po datotekah .potx
pravzaprav nuja.

Moj mikro, November 2009 | Domen Ferbar |