[.Net C#] Automatiseren van Word

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

  • davhor
  • Registratie: Mei 2003
  • Laatst online: 02-12-2025

davhor

www.fon.com

Topicstarter
Ik probeer een softwaretool te maken, welke een word document opent en daaraan een tekstbestand koppelt voor mailmerge. Door gebruik te maken van interop.word heb ik dit voor elkaar gekregen. Nu ontstaat het probleem dat de tool niet werkt voor office versie 2000.

Nu heb ik het hele verhaal geherprogrammeerd d.m.v. late-binding, maar hier ontstaat het probleem. Ik kan nu geen document meer aanwijzen waarmee hij moet mergen.

Hieronder de code welke ik nu gebruik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Type wordAppType = Type.GetTypeFromProgID("Word.Application");

            object wordApp = Activator.CreateInstance(wordAppType);
            object wordDocs = wordAppType.InvokeMember("Documents", BindingFlags.GetProperty, null, wordApp,
            new object[] { });

            object file = Directory + SelDoc + ".doc";
            object[] openArgs = new Object[] { file };
            object WordDoc = wordAppType.InvokeMember("Open",BindingFlags.InvokeMethod, null, wordDocs, openArgs);

            object Mergefile = CustomDirectory + SelDoc + ".txt";
            object[] MergeArgs = new Object[] { Mergefile };
            WordDoc.GetType().InvokeMember("OpenDataSource", BindingFlags.InvokeMethod, null, WordDoc, MergeArgs);

            object Savefile = CustomDirectory + Bestandsnaam + "-" + SelectId + "-" + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Minute + DateTime.Now.Second + ".doc";
            object[] saveArgs = new Object[] { Savefile };
            WordDoc.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, WordDoc, saveArgs);
                   
            openArgs = new object[] { true };
            wordAppType.InvokeMember("Visible",BindingFlags.SetProperty, null, wordApp, openArgs);
Hierbij werkt het merge gedeelte dus niet.

Hieronder zie je de eerste methode welke wel werkt, maar dus niet op de juiste versie van Word, maar wellicht geeft het verheldering:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            object fileName     = Directory + SelDoc +".doc";
            object readOnly     = false;
            object isVisible    = true;
            object missing      = System.Reflection.Missing.Value;

            Word.ApplicationClass WordApp = new Word.ApplicationClass();
            WordApp.Visible = true;
            
            Document Doc = WordApp.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
            
            Doc.MailMerge.OpenDataSource(Directory + SelDoc + ".txt", ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
            Doc.MailMerge.Execute(ref missing);
            Doc.Close(ref readOnly, ref missing, ref missing);
            //Doc.Activate();


Wellicht heeft iemand een idee van aanpak. Google/MSDN hebben me niet echt geholpen bij het laatste probleem.

FON - WiFi for Everyone | Flickr


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 14:43

mulder

ik spuug op het trottoir

Je maakt het jezelf een beetje moeilijk zo door Reflection te gebruiken, ik zou wat andere voorbeeldjes zoeken als ik jou was, bv:
http://msdn2.microsoft.com/en-us/ms173188.aspx
http://msdn.microsoft.com...2003PIASampleLauncher.asp

oogjes open, snaveltjes dicht


  • cannibal
  • Registratie: Maart 2001
  • Laatst online: 18-02 13:31
Voor automation in .net zou ik ook zo ie zo VB.NET gebruiken.
Deze heeft niet die problemen van C# met reflection, zodat je overal voor elke (niet benodigde) parameter die missing moet aanmaken.

Als je de basis aanroepen (op de word applicatie) dan maakt in een aparte vb.net dll kun je daarna deze gewoon gebruiken in een c# dll, waar je dan de rest van de code en businesslogic kunt maken.

[ Voor 34% gewijzigd door cannibal op 13-06-2006 11:52 ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 14:43

mulder

ik spuug op het trottoir

cannibal74 schreef op dinsdag 13 juni 2006 @ 11:50:
Voor automation in .net zou ik ook zo ie zo VB.NET gebruiken.
Deze heeft niet die problemen van C# met reflection, zodat je overal voor elke (niet benodigde) parameter die missing moet aanmaken.

Als je de basis aanroepen (op de word applicatie) dan maakt in een aparte vb.net dll kun je daarna deze gewoon gebruiken in een c# dll, waar je dan de rest van de code en businesslogic kunt maken.
C# en VB.Net kunnen hetzelfde, C# kan het ook op de 'VB.Net manier'; alleen inderdaad de optional parameters die in C# wel gespecifieerd dienen te worden (Missing)

oogjes open, snaveltjes dicht


  • davhor
  • Registratie: Mei 2003
  • Laatst online: 02-12-2025

davhor

www.fon.com

Topicstarter
Don Facundo schreef op dinsdag 13 juni 2006 @ 11:43:
Je maakt het jezelf een beetje moeilijk zo door Reflection te gebruiken, ik zou wat andere voorbeeldjes zoeken als ik jou was, bv:
http://msdn2.microsoft.com/en-us/ms173188.aspx
http://msdn.microsoft.com...2003PIASampleLauncher.asp
Bedankt voor jullie reactie.

Bovenstaande linkjes zijn niet Word 2000 compatible. Om dit voor elkaar te krijgen, maak ik gebruik van reflection, waardoor late-binding mogelijk wordt. Late-binding maakt geen gebruik van de interop.word.dll, maar van de dll welke op de computer reeds is geïnstalleerd met het officepakket. Hierdoor heb je geen versie problemen. Maar wel moeilijkere code, waarbij ik helaas met het mergen vastloop.

Iemand nog ideeen.

FON - WiFi for Everyone | Flickr


  • PoweRoy
  • Registratie: April 2002
  • Laatst online: 11:02

PoweRoy

funky!

offtopic:
wel erg ranzig dat je veel objects gebruikt ipv booleans en strings

[This space is for rent]


  • davhor
  • Registratie: Mei 2003
  • Laatst online: 02-12-2025

davhor

www.fon.com

Topicstarter
PoweRoy schreef op dinsdag 13 juni 2006 @ 13:28:
offtopic:
wel erg ranzig dat je veel objects gebruikt ipv booleans en strings
offtopic:
Helemaal mee eens, maar in alle voorbeelden is dit een vereiste, dus helaas. Mag de pret niet drukken, dat de applicatie straks in alle versies werkt.....hoop ik. :)

FON - WiFi for Everyone | Flickr


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Als je zelf een interop-file aanmaakt voor Word2000, kun je probleemloos met early-binding werken. Die is ook compatible met latere versies (alleen kun je natuurlijk geen gebruik maken van de nieuwe features).
Die interop-file kun je maken door de native-dlls te referencen in je project. De PIA's worden dan in de bin-folder geplaatst geloof ik.

  • davhor
  • Registratie: Mei 2003
  • Laatst online: 02-12-2025

davhor

www.fon.com

Topicstarter
bee-es schreef op dinsdag 13 juni 2006 @ 18:22:
Als je zelf een interop-file aanmaakt voor Word2000, kun je probleemloos met early-binding werken. Die is ook compatible met latere versies (alleen kun je natuurlijk geen gebruik maken van de nieuwe features).
Die interop-file kun je maken door de native-dlls te referencen in je project. De PIA's worden dan in de bin-folder geplaatst geloof ik.
Ok thx, dat klinkt logisch. Nu heb ik zelf geen Word 2000 op mijn PC, maar kan wel .dll files weghalen van een andere pc. Weet je toevallig ook wat de native dll's zijn (of waar ik een overzicht kan vinden), eventueel ook die van Outlook en Excel, dan kan ik de tool ook daarmee uitrbreiden.

Het zou echt super zijn als ik m.b.v. early-binding kan werken. Dat maakt het leven een stuk eenvoudiger.

FON - WiFi for Everyone | Flickr


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

microsoft garandeert backward compatibility, geen forward compatibility.

als je programmeert voor een huidige versie zullen alle volgende versies werken, de voorgaande niet.
Download dus de PIA's van de laagste versie die je wil ondersteunen en het probleem is opgelost.

Anders werk je jezelf enkel in nesten.

ASSUME makes an ASS out of U and ME


  • davhor
  • Registratie: Mei 2003
  • Laatst online: 02-12-2025

davhor

www.fon.com

Topicstarter
HIGHGuY schreef op dinsdag 13 juni 2006 @ 22:58:
microsoft garandeert backward compatibility, geen forward compatibility.

als je programmeert voor een huidige versie zullen alle volgende versies werken, de voorgaande niet.
Download dus de PIA's van de laagste versie die je wil ondersteunen en het probleem is opgelost.

Anders werk je jezelf enkel in nesten.
Dat is dan duidelijk. Alleen zijn er geen PIA's te vinden welke geschikt zijn voor Word 2000. Het is allemaal vanaf 2003....

FON - WiFi for Everyone | Flickr


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

de vroegste zijn office XP

de tip die dus aangeraden wordt is om Office 2000 te installeren en zelf de interop assemblies aan te maken uit de type libraries.

ASSUME makes an ASS out of U and ME


  • davhor
  • Registratie: Mei 2003
  • Laatst online: 02-12-2025

davhor

www.fon.com

Topicstarter
HIGHGuY schreef op woensdag 14 juni 2006 @ 12:06:
de vroegste zijn office XP

de tip die dus aangeraden wordt is om Office 2000 te installeren en zelf de interop assemblies aan te maken uit de type libraries.
Dat is inderdaad de juiste tip!

FON - WiFi for Everyone | Flickr


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
davhor schreef op dinsdag 13 juni 2006 @ 19:58:
[...]

Ok thx, dat klinkt logisch. Nu heb ik zelf geen Word 2000 op mijn PC, maar kan wel .dll files weghalen van een andere pc. Weet je toevallig ook wat de native dll's zijn (of waar ik een overzicht kan vinden), eventueel ook die van Outlook en Excel, dan kan ik de tool ook daarmee uitrbreiden.

Het zou echt super zijn als ik m.b.v. early-binding kan werken. Dat maakt het leven een stuk eenvoudiger.
Met alleen de dll's weet ik niet zeker of het goed gaat. Ik heb ze even voor je klaargezet: Download Office 2000 PIA's

  • davhor
  • Registratie: Mei 2003
  • Laatst online: 02-12-2025

davhor

www.fon.com

Topicstarter
bee-es schreef op woensdag 14 juni 2006 @ 16:57:
[...]

Met alleen de dll's weet ik niet zeker of het goed gaat. Ik heb ze even voor je klaargezet: Download Office 2000 PIA's
Geweldig...! Bedankt! Erg nuttig dit. Het werkt nu helemaal naar tevredenheid + we zijn nog lang niet uitgeknoeid!

FON - WiFi for Everyone | Flickr


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
davhor schreef op woensdag 14 juni 2006 @ 18:57:
[...]


Geweldig...! Bedankt! Erg nuttig dit. Het werkt nu helemaal naar tevredenheid + we zijn nog lang niet uitgeknoeid!
Mooizo, succes ermee
Pagina: 1