2011-08-17 3 views
1

je tente de faire ma demande d'adhésion Delphi automatiser avec Word2010, en créant un OLEObject au lieu d'un composant de forme:Mailmerge en MSOffice 2010 vs La version d'essai, avec Delphi

wrdApp := createoleobject('word.application'); 

ouvre un modèle de publipostage:

wrdDoc := wrdApp.Documents.Open('user definable template location') 
wrdMailMerge := wrdDoc.MailMerge; 

Créez et un mailmerge appelé DataDoc.docx avec les champs et les données extraites d'une base de données des membres.

CreateMailMergeDataDile; 
PopulateMailMergeDataFile; 

Effectuer Publipostage:

wrdMailMerge.Destination := wdSendToNewDocument; 
wrdMailMerge.Execute(False); 

Nettoyage:

wrdDoc.Saved := True; 
wrdDoc.Close(False); 
DeleteFile(DataDoc.docx); 

Mot d'affichage:

wrdApp.Visible := True; 

Cela fonctionne comme un charme sur ma version d'essai de Word2010, sur mailmer simple et multiple ges de ma base de données d'adhésion.

Cependant, je viens de tester sur un PC avec une version complète Word2010 et reçu l'erreur:

"This method or property is not available because the current mail merge main document needs a data source"

La source de données temporaire semble rempli correctement, mais le document modèle semble incapable de l'utiliser ...

Quelqu'un at-il des indices sur la raison pour laquelle cela se produit, ou pourquoi il y aurait une différence entre l'automatisation avec la version complète et la version d'essai? Peut-être pourrait-il même être résolu par un plugin?

Un grand merci

Edit: Voici ma fonction CreateMergeDataFile:

procedure TForm1.CreateMailMergeDataFile; 
var 
    wrdDataDoc : Variant; 
begin 
// Open a data source from C:\Leisure\Membership\Documents containing the field data 
    If FileExists(DocumentDirectory+'\..\DataDoc.docx') then 
    DeleteFile(DocumentDirectory+'\..\DataDoc.docx'); 
    CopyFile(PChar(DocumentDirectory+'\..\MergeFields.docx'),PChar(DocumentDirectory+'\..\DataDoc.docx'),True); 
    wrdDoc.MailMerge.OpenDataSource(DocumentDirectory+'\..\DataDoc.docx',EmptyParam, EmptyParam, EmptyParam, 
          EmptyParam, EmptyParam, EmptyParam, EmptyParam, 
          EmptyParam, EmptyParam, EmptyParam, EmptyParam, 
          EmptyParam, EmptyParam, EmptyParam, EmptyParam); 
end; 

De plus, ce code est uniquement actionnées si la version msword est 14,0 (2010) déterminé par un Word.Application précédemment créé, On m'a dit que cela n'aurait pas besoin d'être terminé.

+2

Il devrait y avoir aucune différence dans l'automatisation. Il existe très probablement une différence de chemins configurés dans l'instance de mot. Soit le chemin du modèle (même si vous semblez l'avoir couvert), soit le chemin où MS Word attend la source de données. On dirait qu'il ne peut pas le trouver là où il l'attend ... –

+0

Merci marjan, c'est un soulagement ce n'est pas une automatisation différente. Selon ma modification ci-dessus, j'utilise un répertoire tiré du fichier ini des programmes pour m'assurer qu'il est toujours correct, et que la source de données est ouverte, éditée et sauvegardée avec succès, mais pas attachée au document principal. Très perturbant.Ma version complète arrive demain donc je peux tester plus loin. – notidaho

+1

Si vous utilisez ODBC, la source de données (système ou utilisateur) est-elle correctement configurée sur le PC où elle ne fonctionne pas? –

Répondre

1

OK juste pour la fermeture, j'ai la solution ...

Je ne sais pas pourquoi, mais apparemment certains Setups la source de données peut se détacher du document, peut-être après sa ré-ouvert et modifié.

J'ai simplement ajouté une ligne de code pour ouvrir à nouveau la source de données après qu'elle ait été enregistrée et avant que la fusion ne soit exécutée. Fonctionne un régal.

Merci pour l'aide

Questions connexes