[ASP/MSWord] Document maken op basis van een sjabloon*

Pagina: 1
Acties:

  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Hallo,
Ik ben bezig met een webapplicatie, en nu loop ik tegen het volgende aan;
Er staan een aantal gegevens op een webpagina(asp), en die moeten op basis van een word sjabloon in een nieuw word document komen zodat ze op op een mooie manier kunnen worden afgedrukt.
In dat sjabloon staan een aantal formfields en daar zouden de gegevens in terecht moeten komen.
Kan iemand mij helpen, of in ieder geval een opzet geven hoe ik dat ongeveer moet aan pakken?

b.v.d.

GC.Collect();


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

En waar had je zelf al naar gezocht? Wat heb je gevonden en geprobeerd? Wat ging daar niet goed aan? Verder: als je ziet dat je je titel vergeten bent, kun je dan meteen een suggestie doen voor een titel? Hiermee kan ik als moderator natuurlijk ook niet veel. ;) Ik zie net je TR. :P

[ Voor 7% gewijzigd door NMe op 13-09-2005 15:12 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Heb een topicreport gestuurd :) , Verder, veel gezocht, onder andere naar DDE Request, met schakelopties/switches, macro's ed, maar het probleem blijft dat je op een of andere manier variabele gegevens aan word moet geven, die er direct in moeten komen te staan.
Heb nu een workaround gemaakt door met een venstertje te komen waar een id moet worden ingevuld, zodat hij de gegevens uit de database zelf haalt...
Maar direct gegevens erin zetten is natuurlijk mooier, en ik denk best dat dat gaat(toch? O-) )

[ Voor 12% gewijzigd door t-x-m op 13-09-2005 15:17 ]

GC.Collect();


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Je kan op zich een macro maken met een parameter, die de inhoud van de parameter in het document schrijft. Door vervolgens herhaaldelijk die macro aan te roepen met verschillende parameters bouw je een heel document op.

Zo heb ik een applicatie gemaakt die documenten kan bouwen. En dan heb ik nog extra macro's om bold, italic, bulletlijstjes, etc. te schakelen.

Siditamentis astuentis pactum.


  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Klink goed, kun je misschien iets duidelijker zijn, want ik begrijp het nog niet helemaal, je zet een macro in je sjabloon, die de gegevens in je document zet, dat begrijp ik, maar hoe komt die macro aan die gegevens??

b.v.d.

GC.Collect();


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Ik heb bijvoorbeeld de macro:

code:
1
2
3
Sub Text(txt As String)
    Selection.TypeText Text:=txt
End Sub


En die roep ik dan als volgt aan (in dit geval vanuit Delphi; ik neem aan dat ASP dit soort dingen op een vergelijkbare manier ondersteunt):

code:
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
constructor WordApp.Create(Visible:boolean);
begin
   CoInitialize(nil);

   inherited Create;

   ep:=EmptyParam;

   theApp:=CoWordApplication.Create;
   theApp.Visible:=Visible;
end;


procedure WordApp.RunMacro(Macro,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12:string);
begin
   theApp.Run(Macro, p1, p2, p3, p4, p5, p6, p7, p8, p9,p10,
                     ep,ep , ep, ep, ep, ep, ep, ep, ep, ep,
                     ep, ep, ep, ep, ep, ep, ep, ep, ep, ep);
end;

...
procedure DoeIets;
begin
   theApp.RunMacro('Text','Dit komt in word te staan!',ep,ep,ep....);
end;


Het daadwerkelijke programma bevat natuurlijk veel meer code, maar dit is het idee. Je laat wordt starten via (weet-ik-hoe-dat-tegenwoordig-heet) COM ofzo, en tegen dat object roep je gewoon 'Run', met een bosje parameters.

Siditamentis astuentis pactum.


  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Goed, ik* heb het opgelost, redelijk eenvoudig(zoals ik al had verwacht).
Namelijk als volgt:
Visual Basic:
1
2
3
4
5
6
7
input_tekst = "Dit moet in het document komen, en het is gelukt!";
Word = new ActiveXObject("Word.Application");
Word.Visible = true;
Doc = Word.Documents.Open('http://mijndomein.nl/submap/document.doc');
Doc.FormFields("naam_tekstvak").Result = input_tekst;
'of(die laatste regel) als macro:
Word.Run("macro_naam",output_r1,output_r2,output_r3);


Overigens, dit: Server.CreateObject("Word.Application") werkte niet, dat kan alleen wanneer office is geinstalleer op de webserver(ofzo).


*Bedankt Varienaja voor je hulp(per mail).

[ Voor 17% gewijzigd door t-x-m op 15-09-2005 12:47 ]

GC.Collect();


  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Overigens, als je een lokaal bestand op het netwerk wild gebruiken moet het volgende doen, want bij mij bleek dat het anders bij sommige (office?)clients niet werkt :?
Visual Basic:
1
2
3
4
'Fout op een lokaal netwerk:
Doc = Word.Documents.Open("\\server1\share\document.doc");
'Goed op een lokaal netwerk:
Doc = Word.Documents.Open(FileName="file:////server1/share/document.doc");

GC.Collect();

Pagina: 1