Stampa unione
Stampa unione
Questa guida mostra come lavorare con i codici di campo di stampa unione e i dati di configurazione della stampa unione in Aspose.Words FOSS per .NET, e dove si trova il confine con l’esecuzione della stampa unione. Aspose.Words FOSS per .NET riconosce e aggiorna i codici di campo di stampa unione di Word — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, e SKIPIF — come parte del suo motore di valutazione dei campi, e può leggere i dati di configurazione della stampa unione (MailMergeSettings) conservati all’interno di un documento. Eseguire una stampa unione reale contro una fonte dati esterna per generare documenti di output popolati — il MailMerge.Execute() flusso di lavoro familiare al prodotto commerciale — è not implementato in questa edizione; nessun MailMerge classe di esecuzione esiste nella superficie attuale di API.
MERGEFIELD — Lettura e modifica dei segnaposto di stampa unione
FieldMergeField implementa il campo MERGEFIELD. FieldName e FieldNameNoPrefix restituiscono il nome della colonna della sorgente dati a cui il campo è associato, TextBefore/TextAfter contengono testo letterale avvolto attorno al valore unito, e IsMapped/IsVerticalFormatting segnalano la mappatura del campo di stampa unione e i flag di layout. Come ogni tipo di campo, supporta GetFieldCode(), Update(), Unlink() e Remove().
ADDRESSBLOCK e GREETINGLINE
FieldAddressBlock implementa il campo ADDRESSBLOCK, con FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat e LanguageId che controllano il modo in cui l’indirizzo del destinatario è formattato. FieldGreetingLine implementa GREETINGLINE, con AlternateText, NameFormat e LanguageId che controllano il testo del saluto.
Campo DATABASE
FieldDatabase implementa il campo DATABASE, esponendo i dettagli di connessione memorizzati nel campo: Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord e LastRecord. Per fornire i risultati della query quando questo campo viene aggiornato, implementa IFieldDatabaseProvider e il suo metodo GetQueryResult(fileName, connection, query, field), quindi assegnalo a Document.FieldOptions.FieldDatabaseProvider prima di chiamare Update(). La proprietà Connection deve essere impostata — senza di essa, Update() non ha alcuna origine dati da interrogare.
Campi di unione condizionali — NEXTIF e SKIPIF
FieldNextIf e FieldSkipIf implementano i campi NEXTIF e SKIPIF, ognuno dei quali espone LeftExpression, ComparisonOperator e RightExpression per il test condizionale. Document.FieldOptions.ComparisonExpressionEvaluator (un IComparisonExpressionEvaluator) può sovrascrivere il modo in cui queste espressioni condizionali vengono valutate.
Dimensionamento del campo di unione immagine
MergeFieldImageDimension rappresenta una larghezza o altezza per un’immagine inserita tramite un campo di unione immagine, costruita come new MergeFieldImageDimension(value) (in punti) o new MergeFieldImageDimension(value, unit) con un MergeFieldImageDimensionUnit esplicito (Point o Percent). Le sue proprietà Value e Unit sono entrambe scrivibili.
Cosa è in ambito e cosa non lo è
Document.MailMergeSettings restituisce un MailMergeSettings oggetto che modella la configurazione della stampa unione OOXML persiste all’interno di un documento — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, e le impostazioni dell’Office Data Source Object (ODSO) tramite OdsoFieldMapData/OdsoRecipientData collezioni. Questa è la configurazione data che il documento porta, non una connessione attiva: lettura e scrittura MailMergeSettings non si connette a un database, foglio di calcolo o rubrica, e questa edizione non ha MailMerge classe di esecuzione per avviare una stampa unione e produrre documenti di output popolati da essa. Ciò che questa edizione supporta è il livello a livello di campo sopra: riconoscere, leggere, aggiornare e modificare i codici dei campi di stampa unione stessi all’interno di un singolo documento tramite il motore di valutazione dei campi.
Suggerimenti e migliori pratiche
- Considera
MailMergeSettingscome metadati del documento che puoi leggere e fare round-trip, non come un API per connettersi a dati esterni — non c’è alcun motore di esecuzione dietro di esso in questa edizione. - Imposta sempre
FieldDatabase.Connectionprima di chiamareUpdate()su un campoDATABASE, altrimenti l’aggiornamento non ha nulla da interrogare. - Implementa
IFieldDatabaseProvideruna sola volta e assegnalo tramiteDocument.FieldOptions.FieldDatabaseProviderper centralizzare il modo in cui tutti i campiDATABASEin un documento risolvono i loro dati. - Usa
FieldMergeField.FieldNameper leggere a quale colonna della fonte dati è associato unMERGEFIELDprima di decidere come elaborarlo programmaticamente.
Problemi comuni
| Problema | Causa | Correggi |
|---|---|---|
FieldDatabase.Update() non restituisce dati | Connection non è impostato, oppure nessun IFieldDatabaseProvider è registrato | Imposta Connection e assegna Document.FieldOptions.FieldDatabaseProvider prima di aggiornare |
Atteso un API in stile MailMerge.Execute() | L’esecuzione di merge contro una fonte dati esterna non è implementata in questa edizione FOSS | Lavora direttamente con le classi dei campi di merge (FieldMergeField, FieldDatabase, ecc.) all’interno di un unico documento, oppure usa il Aspose.Words commerciale per .NET per un’esecuzione completa di merge |
Le condizioni NEXTIF/SKIPIF valutano in modo inatteso | La valutazione dell’espressione di confronto predefinita non corrisponde alla semantica prevista | Implementa IComparisonExpressionEvaluator e assegnalo a Document.FieldOptions.ComparisonExpressionEvaluator |
FAQ
Posso eseguire un mail merge su un CSV o un database in questa edizione?
No. Questa edizione implementa i codici di campo del mail-merge e il modello di dati di configurazione MailMergeSettings, ma non esiste alcuna classe di esecuzione MailMerge per connettersi a una fonte dati esterna e generare documenti popolati.
Cosa posso effettivamente fare con i campi MERGEFIELD, allora?
Puoi leggerli e modificarli direttamente — FieldMergeField.FieldName per il nome della colonna collegata, TextBefore/TextAfter per il testo letterale circostante, e Update()/Unlink()/Remove() come qualsiasi altro campo — all’interno del documento corrente.
È MailMergeSettings inutile senza l’esecuzione del merge?
No — è ancora utile per leggere o riciclare la configurazione di stampa unita memorizzata in un documento, come DataSource, Query o MainDocumentType, anche se questa edizione non utilizza tale configurazione per eseguire un merge.
Come fornisco i dati per un campo DATABASE?
Implementa IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) e assegna la tua implementazione a Document.FieldOptions.FieldDatabaseProvider prima di chiamare Update().
Come controllo la dimensione di un’immagine inserita da un campo merge immagine?
Usa MergeFieldImageDimension, costruito con un valore in punti o un valore più un MergeFieldImageDimensionUnit esplicito (Point o Percent).
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
FieldMergeField | MERGEFIELD campo: FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped |
FieldAddressBlock | ADDRESSBLOCK campo: proprietà di formattazione dell’indirizzo |
FieldGreetingLine | GREETINGLINE campo: proprietà di formattazione del saluto |
FieldDatabase | DATABASE campo: Connection, Query, FileName, TableFormat |
IFieldDatabaseProvider | Fornisce risultati di query per i campi DATABASE tramite GetQueryResult() |
FieldNextIf / FieldSkipIf | NEXTIF / SKIPIF campi di unione condizionali |
MergeFieldImageDimension | Larghezza/altezza per le immagini dei campi di unione |
Document.MailMergeSettings | Dati di configurazione della stampa unione persistenti (non una connessione dati live) |