Злиття листів
Злиття листів
Цей посібник показує, як працювати з кодами полів поштового злиття та даними конфігурації поштового злиття в Aspose.Words FOSS для .NET, і де знаходиться межа з виконанням злиття. Aspose.Words FOSS для .NET розпізнає та оновлює коди полів Word поштового злиття — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, і SKIPIF — як частина його механізму оцінки полів, і може читати дані конфігурації поштового злиття (MailMergeSettings) збережені всередині документа. Виконання реального злиття проти зовнішнього джерела даних для створення заповнених вихідних документів — the MailMerge.Execute() робочий процес, знайомий з комерційного продукту — є not реалізований у цьому випуску; ні MailMerge клас виконання не існує у поточному API поверхні.
MERGEFIELD — Читання та модифікація заповнювачів злиття
FieldMergeField реалізує поле MERGEFIELD. FieldName та FieldNameNoPrefix повертають назву стовпця базового джерела даних, до якого прив’язане поле, TextBefore/TextAfter містять буквальний текст, що оточує злите значення, а IsMapped/IsVerticalFormatting повідомляють про відображення поля злиття та прапори макету. Як і кожен тип поля, воно підтримує GetFieldCode(), Update(), Unlink() та Remove().
ADDRESSBLOCK та GREETINGLINE
FieldAddressBlock реалізує поле ADDRESSBLOCK, причому FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat та LanguageId керують форматом адреси одержувача. FieldGreetingLine реалізує GREETINGLINE, при цьому AlternateText, NameFormat та LanguageId визначають текст привітання.
Поле DATABASE
FieldDatabase реалізує поле DATABASE, розкриваючи деталі підключення, збережені у полі: Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord та LastRecord. Щоб надати результати запиту під час оновлення цього поля, реалізуйте IFieldDatabaseProvider та його метод GetQueryResult(fileName, connection, query, field), потім присвойте його Document.FieldOptions.FieldDatabaseProvider перед викликом Update(). Властивість Connection повинна бути встановлена — без неї Update() не має джерела даних для запиту.
Умовні поля злиття — NEXTIF і SKIPIF
FieldNextIf та FieldSkipIf реалізують поля NEXTIF і SKIPIF, кожне з яких розкриває LeftExpression, ComparisonOperator та RightExpression для умовного тесту. Document.FieldOptions.ComparisonExpressionEvaluator (це IComparisonExpressionEvaluator) може перевизначити спосіб оцінки цих умовних виразів.
Розмірування поля злиття зображення
MergeFieldImageDimension представляє ширину або висоту зображення, вставленого через поле злиття зображення, яке формується як new MergeFieldImageDimension(value) (у пунктах) або new MergeFieldImageDimension(value, unit) з явним MergeFieldImageDimensionUnit (Point або Percent). Його властивості Value та Unit обидві доступні для запису.
Що входить у сферу, а що ні
Document.MailMergeSettings повертає a MailMergeSettings об’єкт, який моделює конфігурацію поштового злиття, OOXML зберігається всередині документа — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, а також налаштування Office Data Source Object (ODSO) через OdsoFieldMapData/OdsoRecipientData колекції. Це конфігурація data яка міститься в документі, а не живе підключення: читання та запис MailMergeSettings не підключається до бази даних, електронної таблиці чи списку адрес, і ця версія не має MailMerge класу виконання для запуску злиття та створення заповнених вихідних документів. Те, що ця версія підтримує, — це рівень полів вище: розпізнавання, читання, оновлення та модифікація самих кодів полів злиття в одному документі за допомогою механізму оцінки полів.
Поради та найкращі практики
- Розглядайте
MailMergeSettingsяк метадані документа, які можна читати та передавати без змін, а не як API для підключення до зовнішніх даних — у цьому випуску немає двигуна виконання позаду нього. - Завжди встановлюйте
FieldDatabase.Connectionперед викликомUpdate()у поліDATABASE, інакше оновлення не матиме чого запитувати. - Реалізуйте
IFieldDatabaseProviderодин раз і призначте його черезDocument.FieldOptions.FieldDatabaseProvider, щоб централізовано керувати тим, як усі поляDATABASEу документі отримують свої дані. - Використовуйте
FieldMergeField.FieldName, щоб дізнатися, до якої колонки джерела даних прив’язанийMERGEFIELD, перед тим як вирішити, як обробляти його програмно.
Поширені проблеми
| Проблема | Причина | Виправити |
|---|---|---|
FieldDatabase.Update() не повертає даних | Connection не встановлено, або IFieldDatabaseProvider не зареєстровано | Встановіть Connection, і призначте Document.FieldOptions.FieldDatabaseProvider перед оновленням |
Очікувалося MailMerge.Execute()-подібне API | Виконання злиття з зовнішнім джерелом даних не реалізовано у цій FOSS-версії | Працюйте з класами полів злиття безпосередньо (FieldMergeField, FieldDatabase, тощо) в одному документі, або використовуйте комерційну Aspose.Words для .NET для повного виконання злиття |
Умови NEXTIF/SKIPIF оцінюються несподівано | Оцінка виразу порівняння за замовчуванням не відповідає очікуваній семантиці | Реалізуйте IComparisonExpressionEvaluator і присвойте його Document.FieldOptions.ComparisonExpressionEvaluator |
FAQ
Чи можу я виконати злиття листів з CSV або базою даних у цьому випуску?
Ні. У цьому випуску реалізовано коди полів злиття листів та модель даних конфігурації MailMergeSettings, але немає класу виконання MailMerge, щоб підключитися до зовнішнього джерела даних і створювати заповнені документи.
Що я насправді можу робити з полями MERGEFIELD, тоді?
Ви можете читати та змінювати їх безпосередньо — FieldMergeField.FieldName для імені прив’язаного стовпця, TextBefore/TextAfter для оточуючого буквального тексту, і Update()/Unlink()/Remove() як будь-яке інше поле — у поточному документі.
Чи є MailMergeSettings безглуздим без виконання злиття?
Ні — вона все ще корисна для читання або повторного використання збереженої конфігурації поштового злиття документу, такої як DataSource, Query або MainDocumentType, навіть якщо ця версія не застосовує цю конфігурацію для запуску злиття.
Як я можу надати дані для поля DATABASE?
Реалізуйте IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) і призначте вашу реалізацію Document.FieldOptions.FieldDatabaseProvider перед викликом Update().
Як я можу контролювати розмір зображення, вставленого полем злиття зображення?
Використайте MergeFieldImageDimension, створений зі значенням у пунктах або значенням плюс явний MergeFieldImageDimensionUnit (Point або Percent).
API Reference Підсумок
| Клас / Метод | Опис |
|---|---|
FieldMergeField | MERGEFIELD поле: FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped |
FieldAddressBlock | ADDRESSBLOCK поле: властивості форматування адреси |
FieldGreetingLine | GREETINGLINE поле: властивості форматування вітання |
FieldDatabase | DATABASE поле: Connection, Query, FileName, TableFormat |
IFieldDatabaseProvider | Надає результати запиту для полів DATABASE через GetQueryResult() |
FieldNextIf / FieldSkipIf | NEXTIF / SKIPIF умовні поля злиття |
MergeFieldImageDimension | Ширина/висота для зображень поля злиття |
Document.MailMergeSettings | Збережені дані конфігурації mail-merge (не живе підключення даних) |