Publipostage
Publipostage
Ce guide montre comment travailler avec les codes de champs de publipostage et les données de configuration de publipostage dans Aspose.Words FOSS pour .NET, et où se situe la limite avec l’exécution du publipostage. Aspose.Words FOSS pour .NET reconnaît et met à jour les codes de champs de publipostage Word — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, et SKIPIF — dans le cadre de son moteur d’évaluation des champs, et peut lire les données de configuration de publipostage (MailMergeSettings) persistées à l’intérieur d’un document. MailMerge.Execute() flux de travail familier du produit commercial — est not implémenté dans cette édition ; aucun MailMerge classe d’exécution n’existe pas dans la surface actuelle de API.
MERGEFIELD — Lecture et modification des espaces réservés de fusion
FieldMergeField implémente le champ MERGEFIELD. FieldName et FieldNameNoPrefix renvoient le nom de colonne de la source de données sous-jacente à laquelle le champ est lié, TextBefore/TextAfter contiennent le texte littéral entourant la valeur fusionnée, et IsMapped/IsVerticalFormatting indiquent le mappage du champ de fusion et les indicateurs de mise en page. Comme tout type de champ, il prend en charge GetFieldCode(), Update(), Unlink() et Remove().
ADDRESSBLOCK et GREETINGLINE
FieldAddressBlock implémente le champ ADDRESSBLOCK, avec FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat et LanguageId contrôlant la façon dont l’adresse du destinataire est formatée. FieldGreetingLine implémente GREETINGLINE, avec AlternateText, NameFormat et LanguageId contrôlant le texte de la salutation.
Champ DATABASE
FieldDatabase implémente le champ DATABASE, exposant les détails de connexion persistés dans le champ : Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord et LastRecord. Pour fournir les résultats de requête lorsque ce champ est mis à jour, implémentez IFieldDatabaseProvider et sa méthode GetQueryResult(fileName, connection, query, field), puis attribuez-le à Document.FieldOptions.FieldDatabaseProvider avant d’appeler Update(). La propriété Connection doit être définie — sans elle, Update() n’a aucune source de données à interroger.
Champs de fusion conditionnels — NEXTIF et SKIPIF
FieldNextIf et FieldSkipIf implémentent les champs NEXTIF et SKIPIF, chacun exposant LeftExpression, ComparisonOperator et RightExpression pour le test conditionnel. Document.FieldOptions.ComparisonExpressionEvaluator (un IComparisonExpressionEvaluator) peut remplacer la façon dont ces expressions conditionnelles sont évaluées.
Dimensionnement du champ de fusion d’image
MergeFieldImageDimension représente une largeur ou une hauteur pour une image insérée via un champ de fusion d’image, construite comme new MergeFieldImageDimension(value) (en points) ou new MergeFieldImageDimension(value, unit) avec un MergeFieldImageDimensionUnit explicite (Point ou Percent). Ses propriétés Value et Unit sont toutes deux modifiables.
Ce qui est inclus, et ce qui ne l’est pas
Document.MailMergeSettings renvoie un MailMergeSettings objet qui modélise la configuration de publipostage OOXML persiste à l’intérieur d’un document — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, et les paramètres de l’Office Data Source Object (ODSO) via OdsoFieldMapData/OdsoRecipientData collections. Il s’agit de la configuration data que le document porte, et non d’une connexion en direct : lecture et écriture MailMergeSettings ne se connecte pas à une base de données, une feuille de calcul ou une liste d’adresses, et cette édition n’a pas MailMerge de classe d’exécution pour lancer un publipostage et produire des documents de sortie remplis à partir de celui-ci. Ce que cette édition prend en charge, c’est la couche au niveau des champs ci-dessus : reconnaître, lire, mettre à jour et modifier les codes de champ de publipostage eux-mêmes dans un seul document via le moteur d’évaluation des champs.
Conseils et bonnes pratiques
- Considérez
MailMergeSettingscomme des métadonnées de document que vous pouvez lire et faire circuler, pas comme un API pour se connecter à des données externes — il n’y a aucun moteur d’exécution derrière dans cette édition. - Définissez toujours
FieldDatabase.Connectionavant d’appelerUpdate()sur un champDATABASE, sinon la mise à jour n’a rien à interroger. - Implémentez
IFieldDatabaseProviderune fois et assignez-le viaDocument.FieldOptions.FieldDatabaseProviderpour centraliser la façon dont tous les champsDATABASEd’un document résolvent leurs données. - Utilisez
FieldMergeField.FieldNamepour lire à quelle colonne de source de données unMERGEFIELDest lié avant de décider comment le traiter programmatiquement.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
FieldDatabase.Update() ne renvoie aucune donnée | Connection n’est pas défini, ou aucun IFieldDatabaseProvider n’est enregistré | Définissez Connection et attribuez Document.FieldOptions.FieldDatabaseProvider avant de mettre à jour |
Attendu un MailMerge.Execute()-style API | L’exécution de fusion avec une source de données externe n’est pas implémentée dans cette édition FOSS | Travaillez directement avec les classes de champs de fusion (FieldMergeField, FieldDatabase, etc.) dans un seul document, ou utilisez le Aspose.Words commercial pour .NET afin d’obtenir une exécution complète de la fusion |
Les conditions NEXTIF/SKIPIF s’évaluent de manière inattendue | L’évaluation par défaut de l’expression de comparaison ne correspond pas à la sémantique attendue | Implémentez IComparisonExpressionEvaluator et assignez-le à Document.FieldOptions.ComparisonExpressionEvaluator |
FAQ
Puis-je exécuter une fusion de courrier sur un CSV ou une base de données dans cette édition ?
Non. Cette édition implémente les codes de champs de fusion de courrier et le modèle de données de configuration MailMergeSettings, mais il n’existe aucun classe d’exécution MailMerge pour se connecter à une source de données externe et générer des documents remplis.
Que puis-je réellement faire avec les champs MERGEFIELD, alors?
Vous pouvez les lire et les modifier directement — FieldMergeField.FieldName pour le nom de colonne lié, TextBefore/TextAfter pour le texte littéral environnant, et Update()/Unlink()/Remove() comme tout autre champ — dans le document actuel.
Le MailMergeSettings est-il inutile sans exécution de la fusion?
Non — il reste utile pour lire ou refaire circuler la configuration de publipostage stockée d’un document, comme DataSource, Query ou MainDocumentType, même si cette édition n’agit pas sur cette configuration pour lancer une fusion.
Comment fournir des données pour un champ DATABASE?
Implémentez IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) et assignez votre implémentation à Document.FieldOptions.FieldDatabaseProvider avant d’appeler Update().
Comment contrôler la taille d’une image insérée par un champ de fusion d’image?
Utilisez MergeFieldImageDimension, construit avec une valeur en points ou une valeur accompagnée d’un MergeFieldImageDimensionUnit explicite (Point ou Percent).
API Reference Résumé
| Classe / Méthode | Description |
|---|---|
FieldMergeField | MERGEFIELD champ : FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped |
FieldAddressBlock | ADDRESSBLOCK champ : propriétés de formatage d’adresse |
FieldGreetingLine | champ GREETINGLINE : propriétés de formatage de la salutation |
FieldDatabase | champ DATABASE : Connection, Query, FileName, TableFormat |
IFieldDatabaseProvider | Fournit les résultats de requête pour les champs DATABASE via GetQueryResult() |
FieldNextIf / FieldSkipIf | NEXTIF / SKIPIF champs de fusion conditionnels |
MergeFieldImageDimension | Largeur/hauteur pour les images de champ de fusion |
Document.MailMergeSettings | Données de configuration de publipostage persistantes (pas une connexion de données en direct) |