Scalanie korespondencji
Korespondencja seryjna
Ten przewodnik pokazuje, jak pracować z kodami pól scalania korespondencji i danymi konfiguracyjnymi scalania korespondencji w Aspose.Words FOSS dla .NET, oraz gdzie znajduje się granica z wykonaniem scalania. Aspose.Words FOSS dla .NET rozpoznaje i aktualizuje kody pól scalania korespondencji w Word — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, oraz SKIPIF — jako część jego silnika oceny pól i może odczytać dane konfiguracyjne scalania korespondencji (MailMergeSettings) przechowywane wewnątrz dokumentu. Przeprowadzanie rzeczywistego scalania z zewnętrznym źródłem danych w celu generowania wypełnionych dokumentów wyjściowych — MailMerge.Execute() przepływ pracy znany z produktu komercyjnego — jest not zaimplementowany w tej edycji; brak MailMerge klasy wykonawczej w bieżącym interfejsie API powierzchni.
MERGEFIELD — Odczytywanie i modyfikowanie znaczników scalenia
FieldMergeField implementuje pole MERGEFIELD. FieldName i FieldNameNoPrefix zwracają nazwę kolumny źródła danych, do której pole jest powiązane, TextBefore/TextAfter przechowują dosłowny tekst otaczający scaloną wartość, a IsMapped/IsVerticalFormatting raportują mapowanie pola scalenia oraz flagi układu. Jak każdy typ pola, obsługuje GetFieldCode(), Update(), Unlink() i Remove().
ADDRESSBLOCK i GREETINGLINE
FieldAddressBlock implementuje pole ADDRESSBLOCK, przy czym FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat i LanguageId kontrolują sposób formatowania adresu odbiorcy. FieldGreetingLine implementuje GREETINGLINE, a AlternateText, NameFormat i LanguageId kontrolują tekst powitania.
Pole DATABASE
FieldDatabase implementuje pole DATABASE, udostępniając szczegóły połączenia przechowywane w polu: Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord oraz LastRecord. Aby dostarczyć wyniki zapytania, gdy to pole jest aktualizowane, zaimplementuj IFieldDatabaseProvider i jego metodę GetQueryResult(fileName, connection, query, field), a następnie przypisz ją do Document.FieldOptions.FieldDatabaseProvider przed wywołaniem Update(). Właściwość Connection musi być ustawiona — bez niej, Update() nie ma źródła danych do zapytania.
Warunkowe pola scalania — NEXTIF i SKIPIF
FieldNextIf i FieldSkipIf implementują pola NEXTIF i SKIPIF, z których każde udostępnia LeftExpression, ComparisonOperator oraz RightExpression do testu warunkowego. Document.FieldOptions.ComparisonExpressionEvaluator (jako IComparisonExpressionEvaluator) może nadpisać sposób oceny tych wyrażeń warunkowych.
Rozmiarowanie pola scalania obrazu
MergeFieldImageDimension reprezentuje szerokość lub wysokość obrazu wstawianego przez pole scalania obrazu, skonstruowaną jako new MergeFieldImageDimension(value) (w punktach) lub new MergeFieldImageDimension(value, unit) z wyraźnym MergeFieldImageDimensionUnit (Point lub Percent). Jego właściwości Value i Unit są zapisywalne.
Co jest w zakresie, a co nie
Document.MailMergeSettings zwraca a MailMergeSettings obiekt modelujący konfigurację korespondencji seryjnej OOXML przechowywany jest wewnątrz dokumentu — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, oraz ustawienia Office Data Source Object (ODSO) poprzez OdsoFieldMapData/OdsoRecipientData kolekcje. To jest konfiguracja data którą dokument zawiera, a nie aktywne połączenie: odczyt i zapis MailMergeSettings nie łączy się z bazą danych, arkuszem kalkulacyjnym ani listą adresową, a ta edycja nie ma MailMerge klasy wykonawczej do uruchomienia korespondencji i wygenerowania wypełnionych dokumentów wyjściowych. To, co ta edycja obsługuje, to warstwa poziomu pól powyżej: rozpoznawanie, odczyt, aktualizowanie i modyfikowanie samych kodów pól korespondencji w jednym dokumencie przy użyciu field evaluation engine.
Wskazówki i najlepsze praktyki
- Traktuj
MailMergeSettingsjako metadane dokumentu, które możesz odczytać i przekazać dalej, a nie jako API do łączenia się z danymi zewnętrznymi — w tej edycji nie ma silnika wykonawczego. - Zawsze ustaw
FieldDatabase.Connectionprzed wywołaniemUpdate()na poluDATABASE, w przeciwnym razie aktualizacja nie będzie miała czego zapytać. - Zaimplementuj
IFieldDatabaseProviderraz i przypisz go za pomocąDocument.FieldOptions.FieldDatabaseProvider, aby scentralizować sposób, w jaki wszystkie polaDATABASEw dokumencie rozwiązują swoje dane. - Użyj
FieldMergeField.FieldName, aby odczytać, do której kolumny źródła danych jest powiązanyMERGEFIELD, zanim zdecydujesz, jak przetworzyć go programowo.
Typowe problemy
| Problem | Przyczyna | Napraw |
|---|---|---|
FieldDatabase.Update() nie zwraca danych | Connection nie jest ustawiony, lub żaden IFieldDatabaseProvider nie jest zarejestrowany | Ustaw Connection i przypisz Document.FieldOptions.FieldDatabaseProvider przed aktualizacją |
Oczekiwano MailMerge.Execute()-stylowego API | Wykonanie scalania z zewnętrznym źródłem danych nie jest zaimplementowane w tej wersji FOSS | Pracuj bezpośrednio z klasami pól scalania (FieldMergeField, FieldDatabase itp.) w jednym dokumencie lub użyj komercyjnego Aspose.Words dla .NET, aby uzyskać pełne wykonanie scalania |
Warunki NEXTIF/SKIPIF oceniają się nieoczekiwanie | Domyślna ocena wyrażenia porównania nie odpowiada oczekiwanej semantyce | Zaimplementuj IComparisonExpressionEvaluator i przypisz go do Document.FieldOptions.ComparisonExpressionEvaluator |
FAQ
Czy mogę wykonać scalanie korespondencji z plikiem CSV lub bazą danych w tej edycji?
Nie. Ta edycja implementuje kody pól scalania korespondencji oraz model danych konfiguracji MailMergeSettings, ale nie ma klasy wykonawczej MailMerge, aby połączyć się z zewnętrznym źródłem danych i wygenerować wypełnione dokumenty.
Co właściwie mogę zrobić z polami MERGEFIELD?
Możesz odczytywać i modyfikować je bezpośrednio — FieldMergeField.FieldName dla nazwy powiązanej kolumny, TextBefore/TextAfter dla otaczającego tekstu dosłownego oraz Update()/Unlink()/Remove() jak każde inne pole — w bieżącym dokumencie.
Czy MailMergeSettings jest bezużyteczne bez wykonania scalania?
Nie — nadal przydaje się do odczytu lub przekazywania dalej zapisanej konfiguracji korespondencji seryjnej dokumentu, takiej jak DataSource, Query lub MainDocumentType, mimo że ta edycja nie wykorzystuje tej konfiguracji do uruchomienia scalania.
Jak dostarczyć dane dla pola DATABASE?
Zaimplementuj IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) i przypisz swoją implementację do Document.FieldOptions.FieldDatabaseProvider przed wywołaniem Update().
Jak kontrolować rozmiar obrazu wstawianego przez pole scalania obrazu?
Użyj MergeFieldImageDimension, skonstruowanego z wartości punktowej lub wartości plus wyraźny MergeFieldImageDimensionUnit (Point lub Percent).
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
FieldMergeField | Pole MERGEFIELD: FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped |
FieldAddressBlock | Pole ADDRESSBLOCK: właściwości formatowania adresu |
FieldGreetingLine | pole GREETINGLINE: właściwości formatowania pozdrowienia |
FieldDatabase | pole DATABASE: Connection, Query, FileName, TableFormat |
IFieldDatabaseProvider | Dostarcza wyniki zapytań dla pól DATABASE za pośrednictwem GetQueryResult() |
FieldNextIf / FieldSkipIf | NEXTIF / SKIPIF pola scalania warunkowego |
MergeFieldImageDimension | Szerokość/wysokość dla obrazów pól scalania |
Document.MailMergeSettings | Trwale przechowywane dane konfiguracji scalania korespondencji (nie jest to połączenie danych w czasie rzeczywistym) |