Je rencontre un problème avec l'utilisation de Word en OLE.
Voici ce que je fais
1- J'ouvre une boite de dialogue pour le nom du fichier à enregistrer
2- J'ouvre Word
3- J'ouvre le fichier sélectionné
4- Je rempli les signets du fichiers (Texte et image)
5- J'enregistre le fichier avec les données modifier avec le nom de la boite de dialogue.
6- Je ferme Word.
Sur le poste avec word 2003, aucun problème.
Sur le poste avec Word 2000, la boite de dialogue de word s'ouvre m'indiquant si je veux ou non sauvegarder les informations du fichier d'origine (alors qu'il ne devrait pas le faire) puis m'affiche un message indiquant que le nom de fichier n'est pas correcte.
Ci dessous ce qui permet la génération du document
Creation de l'objet Word
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 WordObj := TWordObj.Create; // Création de l'objet Word With WordObj do try FileName := GAPPPDOC + 'SiteAnnonces.doc'; Open; // SetSignet('REFERENCE',edtReference.Text); SetSignet('TITRE',edtTitre.Text); InsertImage('IMAGE','http://www.xxxxx/' + cboPhoto.Text); SetSignet('PRIX',edtPrix.Text); SetSignet('TEXTE',mmDescription.Text); if Pos('.doc',SaveDialog1.FileName) = 0 then SaveDialog1.FileName := SaveDialog1.FileName + '.doc'; Save(SaveDialog1.FileName); Close; ModalResult := mrOk; finally WordObj.Free; end; end;
Ouverture du fichier word
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 constructor TWordObj.Create; begin inherited Create; try FComWord := GetActiveOleObject('Word.Application'); Except on E:Exception do FComWord := CreateOleObject('Word.Application'); end; FComWord.Visible := False; // Empeche l'affichage de Word end;
Ajout du texte par rapport au signets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TWordObj.Open; begin if FWordFileName <> '' then FDocument := FComWord.Documents.Open(FWordFileName); end;
Ajout de l'image par rapport à un signet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure TWordObj.SetSignet(SignetName, SignetValue: String); var BookMark,Content : Variant; begin if FDocument.BookMarks.exists(SignetName) then begin BookMark := FDocument.BookMarks.Item(SignetName); BookMark.Select; Content := BookMark.Range; Content.InsertAfter(SignetValue); end; end;
Sauvegarde du fichier modifier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure TWordObj.InsertImage(SignetName, ImageName: String); var BookMark,Content : Variant; begin if FDocument.BookMarks.exists(SignetName) then begin BookMark := FDocument.BookMarks.Item(SignetName); BookMark.Select; FComWord.Selection.InlineShapes.AddPicture( ImageName, False, True, EmptyParam); end; end;
Merci ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TWordObj.Save(FileName: String); begin Try If FileName = '' then FDocument.Save else FDocument.SaveAs(FileName); Except on E:Exception do raise TSAVEERROR.Create(E.Message); end; end;
Partager