Mail Merge
Îmbinare corespondență
Acest ghid arată cum să lucraţi cu codurile de câmp de fuziune de corespondenţă şi datele de configurare a fuziunii de corespondenţă în Aspose.Words FOSS pentru .NET, şi unde se situează limita cu execuţia fuziunii. Aspose.Words FOSS pentru .NET recunoaşte şi actualizează codurile de câmp de fuziune de corespondenţă Word — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, şi SKIPIF — ca parte a motorului său de evaluare a câmpurilor, şi poate citi datele de configurare a fuziunii de corespondenţă (MailMergeSettings) stocate în interiorul unui document. Rularea unei fuziuni reale împotriva unei surse de date externe pentru a genera documente de ieşire completate — MailMerge.Execute() fluxul de lucru familiar din produsul comercial — este not implementat în această ediţie; nu MailMerge există nicio clasă de execuţie în suprafaţa curentă API.
MERGEFIELD — Citirea și modificarea marcajelor de îmbinare
FieldMergeField implementează câmpul MERGEFIELD. FieldName și FieldNameNoPrefix returnează numele coloanei din sursa de date de bază la care este legat câmpul, TextBefore/TextAfter conțin text literal înconjurând valoarea îmbinată, și IsMapped/IsVerticalFormatting raportează maparea câmpului de îmbinare și steagurile de aspect. Ca orice tip de câmp, suportă GetFieldCode(), Update(), Unlink() și Remove().
ADDRESSBLOCK și GREETINGLINE
FieldAddressBlock implementează câmpul ADDRESSBLOCK, cu FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat și LanguageId controlând modul în care este formatată adresa destinatarului. FieldGreetingLine implementează GREETINGLINE, cu AlternateText, NameFormat și LanguageId controlând textul de salut.
Câmp DATABASE
FieldDatabase implementează câmpul DATABASE, expunând detaliile de conexiune stocate în câmpul: Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord și LastRecord. Pentru a furniza rezultatele interogării când acest câmp este actualizat, implementați IFieldDatabaseProvider și metoda sa GetQueryResult(fileName, connection, query, field), apoi atribuiți-l lui Document.FieldOptions.FieldDatabaseProvider înainte de a apela Update(). Proprietatea Connection trebuie setată — fără ea, Update() nu are nicio sursă de date pentru interogare.
Câmpuri de îmbinare condiționale — NEXTIF și SKIPIF
FieldNextIf și FieldSkipIf implementează câmpurile NEXTIF și SKIPIF, fiecare expunând LeftExpression, ComparisonOperator și RightExpression pentru testul condițional. Document.FieldOptions.ComparisonExpressionEvaluator (un IComparisonExpressionEvaluator) poate suprascrie modul în care aceste expresii condiționale sunt evaluate.
Dimensionarea câmpului de îmbinare imagine
MergeFieldImageDimension reprezintă o lățime sau înălțime pentru o imagine inserată printr-un câmp de îmbinare imagine, construită ca new MergeFieldImageDimension(value) (în puncte) sau new MergeFieldImageDimension(value, unit) cu un MergeFieldImageDimensionUnit explicit (Point sau Percent). Proprietățile sale Value și Unit sunt ambele editabile.
Ce este în domeniu și ce nu este
Document.MailMergeSettings returnează un MailMergeSettings obiect care modelează configurația de îmbinare a corespondenței, OOXML persistă într-un document — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, și setările Office Data Source Object (ODSO) prin OdsoFieldMapData/OdsoRecipientData colecții. Aceasta este configurația data documentul poartă, nu o conexiune live: citirea și scrierea MailMergeSettings nu se conectează la o bază de date, foaie de calcul sau listă de adrese, iar această ediție nu are MailMerge clasă de execuție pentru a rula o îmbinare și a produce documente de ieșire completate din aceasta. Ceea ce această ediție suportă este stratul la nivel de câmp de mai sus: recunoașterea, citirea, actualizarea și modificarea codurilor câmpurilor de îmbinare în sine într-un singur document prin motorul de evaluare a câmpurilor.
Sfaturi și cele mai bune practici
- Tratează
MailMergeSettingsca fiind metadate ale documentului pe care le poți citi și transfera înapoi, nu ca un API pentru conectarea la date externe — nu există niciun motor de execuție în spatele acestuia în această ediție. - Setează întotdeauna
FieldDatabase.Connectionînainte de a apelaUpdate()pe un câmpDATABASE, altfel actualizarea nu are nimic de interogat. - Implementează
IFieldDatabaseProvidero singură dată și atribuie-l prinDocument.FieldOptions.FieldDatabaseProviderpentru a centraliza modul în care toate câmpurileDATABASEdintr-un document își rezolvă datele. - Folosește
FieldMergeField.FieldNamepentru a citi la care coloană a sursei de date este legat unMERGEFIELDînainte de a decide cum să îl procesezi programatic.
Probleme comune
| Problemă | Cauză | Repară |
|---|---|---|
FieldDatabase.Update() nu returnează date | Connection nu este setat, sau nu există niciun IFieldDatabaseProvider înregistrat | Setați Connection și atribuiți Document.FieldOptions.FieldDatabaseProvider înainte de actualizare |
Se aștepta un MailMerge.Execute() de tip API | Executarea îmbinirii cu o sursă de date externă nu este implementată în această ediție FOSS | Lucrați cu clasele de câmpuri de îmbinare direct (FieldMergeField, FieldDatabase, etc.) într-un singur document, sau utilizați versiunea comercială Aspose.Words pentru .NET pentru execuție completă a îmbinirii |
Condițiile NEXTIF/SKIPIF se evaluează neașteptat | Evaluarea expresiei de comparare implicită nu se potrivește cu semantica așteptată | Implementați IComparisonExpressionEvaluator și atribuiți-l lui Document.FieldOptions.ComparisonExpressionEvaluator |
FAQ
Pot rula o mail merge pe un CSV sau o bază de date în această ediție?
Nu. Această ediție implementează codurile câmpurilor mail-merge și modelul de date de configurare MailMergeSettings, dar nu există nicio clasă de execuție MailMerge pentru a se conecta la o sursă de date externă și a genera documente populate.
Ce pot face de fapt cu câmpurile MERGEFIELD, atunci?
Le poţi citi şi modifica direct — FieldMergeField.FieldName pentru numele coloanei legate, TextBefore/TextAfter pentru textul literal înconjurător şi Update()/Unlink()/Remove() ca orice alt câmp — în documentul curent.
Este MailMergeSettings inutil fără executarea îmbinării?
Nu — este încă util pentru citirea sau „round-tripping-ul” configuraţiei de mail-merge stocate a unui document, cum ar fi DataSource, Query sau MainDocumentType, chiar dacă această ediţie nu acţionează asupra acelei configuraţii pentru a rula o fuziune.
Cum pot furniza date pentru un câmp DATABASE?
Implementează IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) şi atribuie implementarea ta lui Document.FieldOptions.FieldDatabaseProvider înainte de a apela Update().
Cum pot controla dimensiunea unei imagini inserate printr-un câmp picture merge?
Foloseşte MergeFieldImageDimension, construit cu o valoare în puncte sau o valoare plus un MergeFieldImageDimensionUnit explicit (Point sau Percent).
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
FieldMergeField | Câmpul MERGEFIELD: FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped |
FieldAddressBlock | Câmpul ADDRESSBLOCK: proprietăți de formatare a adresei |
FieldGreetingLine | GREETINGLINE câmp: proprietăți de formatare a salutului |
FieldDatabase | DATABASE câmp: Connection, Query, FileName, TableFormat |
IFieldDatabaseProvider | Furnizează rezultate ale interogării pentru câmpurile DATABASE prin GetQueryResult() |
FieldNextIf / FieldSkipIf | NEXTIF / SKIPIF câmpuri de îmbinare condiționale |
MergeFieldImageDimension | Lățime/înălțime pentru imaginile câmpului de îmbinare |
Document.MailMergeSettings | Date de configurare persistente pentru mail-merge (nu o conexiune de date în timp real) |