Toon posts:

[WORD] Updaten voetteksten

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik beschik over een enorm aantal .dot sjablonen en nu moet in elk van deze sjablonen de voettekst gewijzigd worden in een bepaalde macro die plaatje laadt dmv INCLUDEPICTURE.

Nu is het natuurlijk heel goed mogelijk om voor de x-honderd sjablonen dit met de hand te doen, maar mooier is natuurlijk dit te automatiseren.

Mijn zoektocht naar een oplossing begint hier (ja, ik ben natuurlijk ook google aan het raadplegen).

Ik tast een beetje in het duister met betrekking tot de manier waarop, aangezien ik
dergelijke (diepgaande) kennis van office (nog) niet heb.
Een duwtje in de rug zou dan ook meer dan welkom zijn.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Je moet een paar dingen doen:
0: Maak een backup van je sjablonen
1: Loop door alle sjablonen. Hier zijn wel topics over te vinden. Staan ze in één directory, of verspreid? Als je dat werkend hebt kun je naar stap
2: Wijzig een sjabloon. Doe dat met de hand en laat de macrorecorder de code opnemen. Kijk kritisch naar de code want die is niet altijd even fraai. Voeg foutafhandeling toe.
3: Voeg een en twee samen en test het.
4: Run je code tegen de sjablonen of tegen de backup en overschrijf de oude na controle van de nieuwe.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Goed, na wat googlen en zoeken ben ik met het volgende gekomen:

Ik voeg enkele directives toe in C# (MS Office en MS Word Object libraries).

Deze libraries gebruik zodat ik de Word DLL kan gebruiken en vanuit een programmeeromgeving Word functies aan te roepen.

Dit gaat als volgt:
C#:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Word = Microsoft.Office.Interop.Word;

namespace Footer_001
{
    class Program
    {
       
        static void Main(string[] args)
        {
            String FileDirectory = "L:\\CCS\\word\\sebas_dev\\paar\\";
            String FooterTekst =  "Nieuwe footer tekst";
            Word.Application WordApplication = new Word.Application();
            Word.Document WordDocument = new Word.Document();
            WordApplication.Visible = true;
            Object SjabloonBestand = null;
            Object missing = System.Reflection.Missing.Value;
            Object wordtrue = true;
            Object wordfalse = false;
            
            try{
                // loop door de directory
                foreach(string f in Directory.GetFiles(FileDirectory))
                {
                    SjabloonBestand = (Object)f;
                    WordDocument = WordApplication.Documents.Add(ref SjabloonBestand, ref missing, ref missing, ref missing);
                    WordApplication.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekCurrentPageFooter;
                    WordApplication.Selection.TypeParagraph();
                    WordApplication.Selection.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    WordApplication.ActiveWindow.Selection.Delete(ref missing, ref missing);
                    WordApplication.ActiveWindow.Selection.Font.Name = "verdana";
                    WordApplication.ActiveWindow.Selection.Font.Size = 8;
                    WordApplication.ActiveWindow.Selection.TypeText(FooterTekst);
                    Console.WriteLine(f);
                    
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("Exceptie: "+ ex);
            }
            Console.Read();
        }
    }
}

Het opent de footer en plaatst de nieuwe tekst in de footer.
Helaas is het nog niet helemaal af en moet ik nog verder zoeken naar 2 dingen:
- Verwijderen huidige footer
- ALT-F9 modus in komen en het stukje code plaatsen wat zorgt voor het inladen van de nieuwe footer.

Ik weet niet of mensen hier met deze werkwijze ervaring hebben, maar alle hulp is welkom.

Verder ben ik zeker van plan deze applicatie uit te breiden en te ontwikkelen mits er voldoende animo voor is, want ik denk dat dit vrij nuttig is als simpele standalone applicatie, dus mocht er interesse zijn, roep maar :)

Verwijderd

het invoegen van het includepicture-veld kan met de volgende code als je reeds in de footer zit:
C#:
1
WordApplication.ActiveWindow.Selection.Fields.Add(WordApplication.ActiveWindow.Selection.Range, Word.WdFieldType.wdFieldEmpty, "INCLUDEPICTURE  ""C:\\mijnmap\\bedrijfslogo.png"" ", ref missing)

ook dien je de add te wijzigen naar open voor het openen van het sjabloon, en ook te sluiten na opslaan & aanpassen uiteraard.
maar het bewerken van een map met sjablonen is ook perfecht mogelijk binnen word met vba, ik heb geen ervaring met de interop libraries binnen .net, maar ik dacht dat ze nog niet helemaal zo goed werken.

Verwijderd

Topicstarter
Dankje, dit was iid wat ik nog zocht :)

Overigens heb ik er bewust voor gekozen dit niet in VBA te doen, maar in C#.
Dit oa. omdat ik een stuk handiger ben met C# (kun je nagaan hoe droevig het gesteld is met VBA;))

Verwijderd

Topicstarter
Vandaag wilde ik weer verder gaan waar ik vorige week gebleven was en heb geprobeerd een image als field in de footer te laden, helaas gaat dit niet zonder slag of stoot.

Ik gebruik hiervoor de volgende code
C#:
1
2
3
4
5
// snip
Object IncludePicture = "INCLUDEPICTURE  \"L:\\CCS\\word\\Bedrijf 1\\LOGOs\\voettekst.jpg\" ";
// snip
WordDocument.ActiveWindow.Selection.Fields.Add(WordApplication.ActiveWindow.Selection.Range, ref Missing, ref IncludePicture, ref Missing);
// snip

Helaas, werkt het niet zoals ik zou verwachten, als ik Word bekijk zie ik wél dat er een image geladen wil worden, maar ik krijg het bekende kruisje te zien ipv. de image zelf.
Wat je dus zou verwachten is dat de link naar het plaatje niet werkt.
Om dit te controleren heb ik Word overgeschakeld naar ALT+F9 modus (naam?) en de code gechecked, wat blijkt er staat:
code:
1
{ INCLUDEPICTURE "L:\CCS\word\bedrijf1\LOGOs\voettekst.jpg" \* MERGEFORMAT }

Wat imh (maar toch foute) o goed moet zijn.
Wat zie ik hier nu over het hoofd?

  • sjongenelen
  • Registratie: Oktober 2004
  • Laatst online: 16-07 13:04
die slash achter .jpg verteld waarschijnlijk dat het om een directory gaat...

you had me at EHLO


Verwijderd

Topicstarter
Zie wat je bedoelt, heb het even aangepast, was een overtikvautje :o

Dat is het dus helaas niet :'(

[ Voor 84% gewijzigd door Verwijderd op 20-06-2007 13:38 ]


Verwijderd

Topicstarter
Het is vrij eenvoudig opgelost door
C#:
1
Object IncludePicture = "INCLUDEPICTURE  \"L:\\CCS\\word\\Bedrijf 1\\LOGOs\\voettekst.jpg\" "; 


te veranderen in
C#:
1
Object IncludePicture = "INCLUDEPICTURE  \"L:\\\\CCS\\\\word\\\\Bedrijf 1\\\\LOGOs\\\\voettekst.jpg\" "; 

Volgend probleem ;)

Een tekstje in de body net boven de voettekst hehe

Verwijderd

Topicstarter
Om maar niet een nieuw topic te openen probeer ik het nogmaals in deze.
De applicatie is inmiddels klaar en werkt prima, ben ook erg erkentelijk voor de hulp die me al eerder geboden is in dit topic.

Maar er is nog iets wat ik niet begrijp;

Ik zou graag een tekst willen toevoegen aan het document, en het liefst op de regel boven de voettekst of onder de laatste regel bestaande tekst in het document.

Nu heb ik enigszins gestoeid met Selection.Select() en Selection.Find(string text), maar het gaat niet echt zoals het hoort, met de meeste constructies die ik gefabriceerd heb wordt óf de gehele tekst gewist en vervangen door tekst die ik toegevoegd heb met TypeText(string text) óf de tekst wordt bovenin het document toegevoegd.

Verwijderd

moet ws wel een beetje aangepast worden
C#:
1
2
3
Range range = WordDocument.GetRange();
range.InsertParagraphAfter();
range.InsertAfter("laatste regel.");

Verwijderd

Topicstarter
C#:
1
InsertParagraphAfter

Dit was inderdaad precies wat ik zocht _/-\o_
Mag ik vragen hoe je deze kennis hebt opgedaan, want ik vind dat het bijzonder slecht gedocumenteerde functionaliteit is.

Verwijderd

opzoeken in /78 :) ?
nee, jarenlange ervaring met office en regelmatig kennis bijtanken via het internet.
Pagina: 1