VBS / Word 2002
VoorafIk heb wat hulp nodig, want ik kom er niet meer uit. Het volgende is het geval. Wij hebben te maken met een partij (duizenden) oude Word-documenten met de meest ranzige opmaakprofielen erin. Daar moeten we vanaf. Die tekstgedeelten moeten opmaakprofiel "standaard" krijgen, want alleen dan kan onze software de opmaak op een juiste manier verder verwerken.
Natuurlijk kan ik simpel en snel een macro maken om al die bestanden naar het profiel "Standaard" te rauzen. Maar dan zijn we een aantal simpele opmaakeigenschappen kwijt, die we als enige wél willen behouden. Dat gaat om: bold, italic, underlined, en de alinea-eigenschap "verkeerd-om inspringen" en tabstops moeten bewaard blijven.
Oplossing?
Het was mijn plan om een macro in elkaar te zetten die alle andere opmaakprofielen dan Standaard omzet naar het opmaakprofiel Standaard en als zo'n tekstgedeelte dan bold, italic of underlined is (zij het op grond van het [niet-standaard] opmaakprofiel, zij het als aanvullende style), dan wel een combinatie daarvan, dan moeten die eigenschappen daarna weer teruggezet worden.
Kop 8 + bold moet dus uiteindelijk Standaard + bold worden. Sectiehoofd + underlined moet uiteindelijk Standaard + underlined worden.
Kortom: alles wat niet "Standaard" is moet Standaard worden, met behoud van bold, italic of underline, en die paar simpele alinea eigenschappen...
Ik meende dat wel met een macro op te kunnen lossen, maar VBS is geen PHP, waar ik wel een beetje mijn weg in weet. Simpelweg het opnemen van mijn acties levert mij niet voldoende oplossingen, dus het wordt handwerk.
Mijn uitgangspunt was om heel simpel te beginnen en dat dan steeds verder uit te bouwen met extra eigenschapppen. Nou ben ik tot het onderstaande gekomen (dit staat tussen nog wat andere onzin). Dat functioneert als volgt: als een stuk tekst al "Standaard" is, wordt het met rust gelaten en wordt naar de volgende paragraaf geskipt. Als het opmaakprofiel daarvan dan niet standaard is en wél vetgedrukt, wordt het in "Standaard" omgezet.
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| Dim oRg As Range Dim oTestRg As Range Set oRg = ActiveDocument.Range With oRg.Find .ClearFormatting .Text = "" .Style = "Standaard" .Format = True .Forward = True .Wrap = wdFindStop Do While .Execute Set oTestRg = oRg.Duplicate With oTestRg .Collapse wdCollapseEnd ' dit is de simpelste variant om mee te beginnen: ' als het opmaakprofiel niet "standaard is ' en de font-style is "vet", maak het dan "Standaard" If (LCase(.Style) <> "standaard") And (.Font.Bold = True) Then ' onderstaande regel werkt wel, maar .Font.Italic = True niet?? .Style = "Standaard" End If End With Loop End With |
Probleem
Ik dacht: simpel moet wel effectief zijn, maar meteen bij de volgende stap gaat het fout. Als ik bijvoorbeeld niet die tekst in "Standaard" om wil zetten, maar in plaats daarvan .Font.Italic = True opneem op regel 21, dan gebeurt er dus helemaal niks. En dat snap ik niet... Ik heb daar inmiddels verschillende dingen geprobeerd, maar kom er niet uit.
Hulp hiermee, of betere ideeën?
Ik ben vast niet de eerste die oude documenten van hun overbodige opmaakprofielen heeft willen ontdoen bij een conversie... maar ik kon hier weinig over vinden helaas. Ook een avondje Googlen bracht mij niet op betere ideeën dan het bovenstaande.
Is er iemand die mij een stap verder kan helpen? Zit ik überhaupt wel op de goede weg hiermee? Of zijn er efficiëntere manieren om zo'n conversie van Wordbestanden aan te pakken wellicht? Alvast bedankt.
When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.