Utskickssammanslagning
Seriekoppling
Den här guiden visar hur man arbetar med mail-merge-fältkoder och mail-merge-konfigurationsdata i Aspose.Words FOSS för .NET, och var gränsen för merge-exekvering ligger. Aspose.Words FOSS för .NET känner igen och uppdaterar Word-mail-merge-fältkoderna — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, och SKIPIF — som en del av dess fältutvärderingsmotor, och kan läsa mail-merge-konfigurationsdata (MailMergeSettings) som lagras i ett dokument. Att köra en faktisk merge mot en extern datakälla för att generera ifyllda utmatningsdokument — den MailMerge.Execute() arbetsflöde som är bekant från den kommersiella produkten — är not implementerat i denna utgåva; ingen MailMerge exekveringsklass finns i den nuvarande API-ytan.
MERGEFIELD — Läsa och modifiera sammanslagningsplatshållare
FieldMergeField implementerar MERGEFIELD-fältet. FieldName och FieldNameNoPrefix returnerar det underliggande datakällans kolumnnamn som fältet är bundet till, TextBefore/TextAfter innehåller bokstavlig text som omsluter det sammanslagna värdet, och IsMapped/IsVerticalFormatting rapporterar sammanslagningsfält-mappning och layoutflaggor. Precis som varje fälttyp stödjer den GetFieldCode(), Update(), Unlink() och Remove().
ADDRESSBLOCK och GREETINGLINE
FieldAddressBlock implementerar ADDRESSBLOCK-fältet, med FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat och LanguageId som styr hur mottagarens adress formateras. FieldGreetingLine implementerar GREETINGLINE, med AlternateText, NameFormat och LanguageId som styr hälsningstexten.
DATABASE-fält
FieldDatabase implementerar DATABASE-fältet och exponerar anslutningsdetaljerna som lagras i fältet: Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord och LastRecord. För att leverera frågeresultat när detta fält uppdateras, implementera IFieldDatabaseProvider och dess GetQueryResult(fileName, connection, query, field)-metod, tilldela den sedan till Document.FieldOptions.FieldDatabaseProvider innan du anropar Update(). Connection-egenskapen måste sättas — utan den har Update() ingen datakälla att fråga.
Villkorliga sammanslagningsfält — NEXTIF och SKIPIF
FieldNextIf och FieldSkipIf implementerar NEXTIF- och SKIPIF-fälten, som var och en exponerar LeftExpression, ComparisonOperator och RightExpression för det villkorliga testet. Document.FieldOptions.ComparisonExpressionEvaluator (en IComparisonExpressionEvaluator) kan åsidosätta hur dessa villkorliga uttryck utvärderas.
Storlek på bildsammanfogningsfält
MergeFieldImageDimension representerar en bredd eller höjd för en bild som infogas via ett bildsammanfogningsfält, konstruerad som new MergeFieldImageDimension(value) (i punkter) eller new MergeFieldImageDimension(value, unit) med en explicit MergeFieldImageDimensionUnit (Point eller Percent). Dess Value- och Unit-egenskaper är båda skrivbara.
Vad som omfattas och vad som inte gör det
Document.MailMergeSettings returnerar en MailMergeSettings objekt som modellerar mail-merge-konfigurationen som OOXML lagrar i ett dokument — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, och Office Data Source Object (ODSO)-inställningarna via OdsoFieldMapData/OdsoRecipientData samlingar. Detta är konfiguration data som dokumentet bär, inte en levande anslutning: läsning och skrivning MailMergeSettings ansluter inte till en databas, kalkylblad eller adresslista, och den här utgåvan har ingen MailMerge exekveringsklass för att köra en sammanslagning och skapa ifyllda utmatningsdokument från den. Vad den här utgåvan stödjer är lager på fältnivå ovanför: att känna igen, läsa, uppdatera och modifiera själva sammanslagningsfältkoderna i ett enda dokument via fältutvärderingsmotorn.
Tips och bästa praxis
- Behandla
MailMergeSettingssom dokumentmetadata som du kan läsa och vidarebefordra, inte som en API för att ansluta till extern data — det finns ingen exekveringsmotor bakom den i den här utgåvan. - Ställ alltid in
FieldDatabase.Connectioninnan du anroparUpdate()på ettDATABASE-fält, annars har uppdateringen inget att fråga efter. - Implementera
IFieldDatabaseProvideren gång och tilldela den viaDocument.FieldOptions.FieldDatabaseProviderför att centralisera hur allaDATABASE-fält i ett dokument hämtar sin data. - Använd
FieldMergeField.FieldNameför att läsa vilken datakällskolumn enMERGEFIELDär bunden till innan du bestämmer hur den ska bearbetas programatiskt.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
FieldDatabase.Update() returnerar ingen data | Connection är inte satt, eller så är ingen IFieldDatabaseProvider registrerad | Ställ in Connection, och tilldela Document.FieldOptions.FieldDatabaseProvider innan du uppdaterar |
Förväntade en MailMerge.Execute()-stil API | Sammanfogningskörning mot en extern datakälla är inte implementerad i denna FOSS-utgåva | Arbeta med sammanslagningsfältklasserna direkt (FieldMergeField, FieldDatabase, osv.) i ett enda dokument, eller använd den kommersiella Aspose.Words för .NET för fullständig sammanslagningskörning |
NEXTIF/SKIPIF villkor utvärderas oväntat | Standardutvärdering av jämförelseuttryck matchar inte den förväntade semantiken | Implementera IComparisonExpressionEvaluator och tilldela den till Document.FieldOptions.ComparisonExpressionEvaluator |
FAQ
Kan jag köra en brevlådesammanslagning mot en CSV eller databas i den här utgåvan?
Nej. Denna utgåva implementerar fältkoderna för brevlådesammanslagning och MailMergeSettings-konfigurationsdatamodellen, men det finns ingen MailMerge-exekveringsklass för att ansluta till en extern datakälla och generera ifyllda dokument.
Vad kan jag faktiskt göra med MERGEFIELD-fält, då?
Du kan läsa och ändra dem direkt — FieldMergeField.FieldName för det bundna kolumnnamnet, TextBefore/TextAfter för omgivande bokstavlig text, och Update()/Unlink()/Remove() som vilket annat fält som helst — i det aktuella dokumentet.
Är MailMergeSettings värdelös utan merge-exekvering?
Nej — det är fortfarande användbart för att läsa eller återföra ett dokuments lagrade mail-merge-konfiguration, såsom DataSource, Query eller MainDocumentType, även om den här utgåvan inte använder den konfigurationen för att köra en merge.
Hur levererar jag data till ett DATABASE-fält?
Implementera IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) och tilldela din implementation till Document.FieldOptions.FieldDatabaseProvider innan du anropar Update().
Hur kontrollerar jag storleken på en bild som infogas via ett picture merge-fält?
Använd MergeFieldImageDimension, konstruerad med ett punktvärde eller ett värde plus en explicit MergeFieldImageDimensionUnit (Point eller Percent).
API Reference Sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
FieldMergeField | MERGEFIELD fält: FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped |
FieldAddressBlock | ADDRESSBLOCK fält: egenskaper för adressformatering |
FieldGreetingLine | GREETINGLINE fält: hälsningsformateringsegenskaper |
FieldDatabase | DATABASE fält: Connection, Query, FileName, TableFormat |
IFieldDatabaseProvider | Tillhandahåller frågeresultat för DATABASE fält via GetQueryResult() |
FieldNextIf / FieldSkipIf | NEXTIF / SKIPIF villkorliga sammanslagningsfält |
MergeFieldImageDimension | Bredd/höjd för bildens sammanslagningsfältbilder |
Document.MailMergeSettings | Sparad mail-merge-konfigurationsdata (inte en levande datakoppling) |