[VB.NET] Word template (bookmarks) invullen via openxml

Pagina: 1
Acties:

Onderwerpen


  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 19-09 20:48
Ik wil dus via de openxml sdk enkele brieven genereren.

Ik heb nu een lijst van verschillende personen met extra gegevens. Ik heb ook per taal een aparte template. Momenteel heb ik dus een template voor nl , en , fr.

Ik zou dus als ik een brief wil genereren de templates gaan kopieren naar een specifieke map. Dus er zullen 3 verschillende documenten zijn. Voor iedere taal een andere. Ik zou ook 3 xml files willen maken. Per taal 1. Maar je moet dus meerdere personen in het word document kunnen plaatsen. Dus in uiteindelijke file voor nederlandse taal kunnen dus 20 brieven in staan.

Ik had eerst volgende link gevonden http://seroter.wordpress....mplates-through-open-xml/ maar deze maakt gebruik van Content Controls.
Volgende heb ik ook nog gevonden http://msdn.microsoft.com...56565%28office.11%29.aspx maar deze gaat gewoon bookmarks aflopen en niet kijken welke bookmark het is.
Ik zoo een uitgebreide lijst meegeven omdat mensen simpel templates moeten kunnen aanmaken en dus dat veld automatisch in code al meegegeven wordt.

En het is de bedoeling dat andere mensen snel een template met bookmarks kan maken. En niet nog gaan koppelen van xp path.

Maar als ik andere opties uit google bekijk. Gaat het hier allemaal om Content Controls. Is dit niet mogelijk met gewone bookmarks? Een duw in de goede richting zou me al hard helpen. Maar ik zie door het bos de bomen niet meer :(

Acties:
  • 0 Henk 'm!

  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 19-09 20:48
Niemand die me op een of andere manier kan verder helpen ? :(

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik kan niet echt volgen wat je nu precies wil eigenlijk. In ieder geval staan er een paar foutjes in je OP waardoor het nog lastiger lezen wordt (vb: xp path<>xpath). Als de eindgebruikers toch al office hebben omdat ze zelf nieuwe templates moeten kunnen aanleveren, waarom zou je dan niet gewoon de mail merge van word gebruiken? :p

Verder is xml ook gewoon text (ook gezipt in dit geval), dus kun je gewoon kijken wat er gebeurd. Ik denk dat je je misschien even moet inlezen in xml/xpath. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 19-09 20:48
Ik zal het proberen beter uit te leggen.

Ik heb een Observable Collection van objecten.
Dit object bevat alle informatie die nodig is:
code:
1
2
3
4
5
6
-FirstName
-LastName
-StreetAndNumber
-City
-Telefoon
-Fax


Deze heb ik dus in mijn code (Vb.net)
Momenteel bestaat de applicatie uit 3 talen ( nl, en, fr ). Maar dit kan makkelijk aangepast worden.
De templates kan je makkelijk beheren. In een scherm. Waar je de taal koppelt aan een locatie waar de template zich bevindt.

code:
1
2
3
-nl   c:\Temp\Brief_nl.docx
-en  c:\Temp\Brief_en.docx
-fr    c:\Temp\Brief_fr.docx


Wanneer moeten brieven aangemaakt worden?
Er worden lijsten weergegeven. Daarin bevinden zich personen.
Daarop bevindt zich een knop om een brief te generen. Daarna worden aan de hand van die personen mijn objecten met alle nodig informatie opgevult. En krijgt u een de optie van een brief te selecteren en een output locatie.

Een brief kan bestaan als volgt
code:
1
2
3
4
Beste [FirstName] [LastName]

Uw adres [StreetAndNumber]
Uw gemeente [City]


Een andere brief kan bestaan als volgt
code:
1
2
3
4
Beste [FirstName] [LastName]

Uw telefoon [telefoon]
Uw fax [fax]


Dus in de brieven/templates bestaan niet alle velden uit het object.

Nu dat je dus de brief/output locatie geselecteerd hebt moet er voor elke taal een document gegenereerd worden.

Dus in nl template moeten alle personen met als landstaal nl komen die in mijn observable collection zitten.
Dus in de output location komen dus nu 3 documenten ( elke taal 1 ). En in elke document kunnen dan 100'den brieven zitten om afgedrukt te worden.
En omdat de klant ook templates moet kunnen aanmaken( aan de hand van onze documentatie van object ) mag dit niet te moeilijk zijn.
Die content controls was zeer goed zoals uit mijn voorbeeld maar daarmee moet je nog manueel relaties leggen en dat is niet de bedoeling.

Hoe werkt die mail merge dan? Heb al eens geprobeerd. Maar dit lijkt me nog zo gemakkelijk niet voor de klant om nieuwe templates aan te maken?

Hopelijk kun je er een beetje aanuit? Zit er al veel te lang aan te prullen.

Acties:
  • 0 Henk 'm!

  • BvDorp
  • Registratie: Januari 2004
  • Laatst online: 14-09 16:39
In mijn ervaring is Mail Merge aan de gemiddelde gebruiker in een uur uit te leggen. Dus een kleine training geven en gaan, daarna leggen ze het elkaar wel uit. Schrijf ook even een handleiding met veel te veel plaatjes. Succes gegarandeerd.

Mail Merge werkt als volgt: je maakt een document (template). Dit koppel je aan een databestand (Access database, Excel file, whatever). Vervolgens verwerk je in het document bepaalde velden uit dit databestand. Bijvoorbeeld:

beste [naam],

Uw [zoon/dochter] ..

Daarna kun je aangeven hoeveel datarijen gebruikt moeten worden uit het bronbestand, en kun je ervoor kiezen het gecreerde document op te slaan of uit te printen. Werkt als een trein.

Acties:
  • 0 Henk 'm!

  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 19-09 20:48
BvDorp schreef op zondag 29 augustus 2010 @ 16:39:
In mijn ervaring is Mail Merge aan de gemiddelde gebruiker in een uur uit te leggen. Dus een kleine training geven en gaan, daarna leggen ze het elkaar wel uit. Schrijf ook even een handleiding met veel te veel plaatjes. Succes gegarandeerd.

Mail Merge werkt als volgt: je maakt een document (template). Dit koppel je aan een databestand (Access database, Excel file, whatever). Vervolgens verwerk je in het document bepaalde velden uit dit databestand. Bijvoorbeeld:

beste [naam],

Uw [zoon/dochter] ..

Daarna kun je aangeven hoeveel datarijen gebruikt moeten worden uit het bronbestand, en kun je ervoor kiezen het gecreerde document op te slaan of uit te printen. Werkt als een trein.
Dus wat ik allemaal verlang kan je gewoon via mailmerge oplossen?
En wat is makkelijk ? Een gewone leek kan ook gewoon "velden" aanmaken?

[ Voor 3% gewijzigd door Sven_Vdb op 29-08-2010 18:17 ]


Acties:
  • 0 Henk 'm!

  • BvDorp
  • Registratie: Januari 2004
  • Laatst online: 14-09 16:39
Sven_Vdb schreef op zondag 29 augustus 2010 @ 18:17:
[...]


Dus wat ik allemaal verlang kan je gewoon via mailmerge oplossen?
En wat is makkelijk ? Een gewone leek kan ook gewoon "velden" aanmaken?
Ja, dit gaat best gemakkelijk. Probeer zelf eens en hou bij hoelang het duurt voor je het in de vingers krijgt, bijvoorbeeld. En je kunt gewoon een test opzetten met een aantal mensen, om te zien hoe snel zoiets opgepakt wordt?

Acties:
  • 0 Henk 'm!

  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 19-09 20:48
Omdat voor ons de mailmerge veel problemen gaf. Proberen we het nu anders. Dit is bijna volledig gelukt. Maar het laatste stuk wil maar niet lukken. Wat ik nu heb.

Allemaal body's opgehaald door
code:
1
WordprocessingDocument.Open("c:\Temp\Test.docx").MainDocumentPart.Document.Body.OuterXml


Ik heb nu een lijst van allemaal body's. Deze zijn allemaal verschillend. Dit is me dus gelukt om alle verschillende contactgegevens voor die mensen in een body te steken.

Maar nu moet elke body in dat word document geplaatst worden. Ik heb dit proberen te doen met de altchunk maar die geeft mij altijd een corrupt bestand terug.

Bestaat er niet ene functie in openxml die dit direct kan ? Gewoon body's aanbieden en een nieuw word document opbouwen.

Acties:
  • 0 Henk 'm!

  • BvDorp
  • Registratie: Januari 2004
  • Laatst online: 14-09 16:39
Ik begrijp dit topic steeds minder. Je vragen duiken meteen de details in, maar volgens mij heeft niemand ook maar een idee over wat je aan het uitspoken bent. Los daarvan kan ik me niet voorstellen dat de MailMerge niet functioneert: elke MBO secretaresse opleiding behandelt dit onderwerp en lukt het studentes af te leveren die hiermee overweg kunnen.

Als ik zo vrij mag zijn. :>
Pagina: 1