Ghép Thư

Hợp nhất Thư

Hướng dẫn này cho thấy cách làm việc với mã trường mail-merge và dữ liệu cấu hình mail-merge trong Aspose.Words FOSS cho .NET, và nơi ranh giới với việc thực thi merge nằm ở đâu. Aspose.Words FOSS cho .NET nhận dạng và cập nhật các mã trường mail-merge của Word — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, và SKIPIF — như một phần của công cụ đánh giá trường của nó, và có thể đọc dữ liệu cấu hình mail-merge (MailMergeSettings) được lưu trong một tài liệu. Thực hiện một merge thực tế đối với nguồn dữ liệu bên ngoài để tạo ra các tài liệu đầu ra đã được điền — the MailMerge.Execute() quy trình quen thuộc từ sản phẩm thương mại — là not được triển khai trong phiên bản này; không MailMerge có lớp thực thi nào tồn tại trong giao diện API hiện tại.


MERGEFIELD — Đọc và Sửa Đổi Các Trình Giữ Chỗ Hợp Nhất

FieldMergeField triển khai trường MERGEFIELD. FieldName và FieldNameNoPrefix trả về tên cột nguồn dữ liệu cơ bản mà trường được ràng buộc, TextBefore/TextAfter giữ văn bản nguyên bao quanh giá trị đã hợp nhất, và IsMapped/IsVerticalFormatting báo cáo ánh xạ trường hợp nhất và các cờ bố cục. Giống như mọi loại trường, nó hỗ trợ GetFieldCode(), Update(), Unlink(), và Remove().


ADDRESSBLOCK và GREETINGLINE

FieldAddressBlock triển khai trường ADDRESSBLOCK, với FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat, và LanguageId kiểm soát cách định dạng địa chỉ của người nhận. FieldGreetingLine triển khai GREETINGLINE, với AlternateText, NameFormat, và LanguageId kiểm soát văn bản lời chào.


Trường DATABASE

FieldDatabase triển khai trường DATABASE, cung cấp các chi tiết kết nối được lưu trong trường: Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord và LastRecord. Để cung cấp kết quả truy vấn khi trường này được cập nhật, hãy triển khai IFieldDatabaseProvider và phương thức GetQueryResult(fileName, connection, query, field) của nó, sau đó gán nó cho Document.FieldOptions.FieldDatabaseProvider trước khi gọi Update(). Thuộc tính Connection phải được đặt — nếu không, Update() sẽ không có nguồn dữ liệu để truy vấn.


Trường hợp hợp nhất có điều kiện — NEXTIF và SKIPIF

FieldNextIf và FieldSkipIf triển khai các trường NEXTIF và SKIPIF, mỗi trường đều cung cấp LeftExpression, ComparisonOperator và RightExpression cho kiểm tra có điều kiện. Document.FieldOptions.ComparisonExpressionEvaluator (một IComparisonExpressionEvaluator) có thể ghi đè cách các biểu thức có điều kiện này được đánh giá.


Kích thước Trường Hợp nhất Hình ảnh

MergeFieldImageDimension đại diện cho chiều rộng hoặc chiều cao của một hình ảnh được chèn qua trường hợp nhất hình ảnh, được tạo dưới dạng new MergeFieldImageDimension(value) (theo điểm) hoặc new MergeFieldImageDimension(value, unit) với một MergeFieldImageDimensionUnit rõ ràng (Point hoặc Percent). Các thuộc tính Value và Unit của nó đều có thể ghi.


Những gì nằm trong phạm vi và những gì không

Document.MailMergeSettings trả về một MailMergeSettings đối tượng mô hình cấu hình mail-merge OOXML tồn tại bên trong tài liệu — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, và các thiết lập Office Data Source Object (ODSO) qua OdsoFieldMapData/OdsoRecipientData các collection. Đây là cấu hình data tài liệu mang theo, không phải kết nối trực tiếp: việc đọc và ghi MailMergeSettings không kết nối tới cơ sở dữ liệu, bảng tính, hoặc danh sách địa chỉ, và phiên bản này không có MailMerge lớp thực thi để chạy một merge và tạo ra các tài liệu đầu ra đã được điền dữ liệu từ đó. Điều mà phiên bản này hỗ trợ là lớp cấp độ trường phía trên: nhận dạng, đọc, cập nhật và sửa đổi các mã trường merge tự chúng trong một tài liệu duy nhất thông qua bộ máy đánh giá trường.


Mẹo và Thực hành Tốt nhất

  • Xem MailMergeSettings như siêu dữ liệu tài liệu mà bạn có thể đọc và truyền qua lại, không phải là một API để kết nối với dữ liệu bên ngoài — không có động cơ thực thi nào phía sau nó trong phiên bản này.
  • Luôn đặt FieldDatabase.Connection trước khi gọi Update() trên trường DATABASE, nếu không việc cập nhật sẽ không có gì để truy vấn.
  • Triển khai IFieldDatabaseProvider một lần và gán nó qua Document.FieldOptions.FieldDatabaseProvider để tập trung cách tất cả các trường DATABASE trong tài liệu giải quyết dữ liệu của chúng.
  • Sử dụng FieldMergeField.FieldName để đọc cột nguồn dữ liệu mà MERGEFIELD được ràng buộc trước khi quyết định cách xử lý nó bằng lập trình.

Các vấn đề thường gặp

Vấn đềNguyên nhânSửa
FieldDatabase.Update() không trả về dữ liệuConnection chưa được thiết lập, hoặc không có IFieldDatabaseProvider nào được đăng kýĐặt Connection, và gán Document.FieldOptions.FieldDatabaseProvider trước khi cập nhật
Dự kiến một MailMerge.Execute()-style APIThực thi hợp nhất đối với nguồn dữ liệu bên ngoài chưa được triển khai trong phiên bản FOSS nàyLàm việc trực tiếp với các lớp trường hợp nhất (FieldMergeField, FieldDatabase, v.v.) trong một tài liệu duy nhất, hoặc sử dụng Aspose.Words thương mại cho .NET để thực thi hợp nhất đầy đủ
Các điều kiện NEXTIF/SKIPIF đánh giá không như mong đợiĐánh giá biểu thức so sánh mặc định không khớp với ngữ nghĩa mong đợiTriển khai IComparisonExpressionEvaluator và gán nó cho Document.FieldOptions.ComparisonExpressionEvaluator

FAQ

Tôi có thể thực hiện mail merge với tệp CSV hoặc cơ sở dữ liệu trong phiên bản này không?

Không. Phiên bản này triển khai các mã trường mail-merge và mô hình dữ liệu cấu hình MailMergeSettings, nhưng không có lớp thực thi MailMerge để kết nối với nguồn dữ liệu bên ngoài và tạo ra các tài liệu đã được điền dữ liệu.

Vậy tôi thực sự có thể làm gì với các trường MERGEFIELD?

Bạn có thể đọc và sửa đổi chúng trực tiếp — FieldMergeField.FieldName cho tên cột đã ràng buộc, TextBefore/TextAfter cho văn bản nguyên mẫu bao quanh, và Update()/Unlink()/Remove() như bất kỳ trường nào khác — trong tài liệu hiện tại.

Có phải MailMergeSettings vô dụng khi không thực hiện merge không?

Không — nó vẫn hữu ích để đọc hoặc truyền lại cấu hình mail-merge được lưu trong tài liệu, chẳng hạn như DataSource, Query hoặc MainDocumentType, mặc dù phiên bản này không thực hiện cấu hình đó để chạy merge.

Làm sao tôi cung cấp dữ liệu cho trường DATABASE?

Triển khai IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) và gán triển khai của bạn cho Document.FieldOptions.FieldDatabaseProvider trước khi gọi Update().

Làm sao tôi kiểm soát kích thước của hình ảnh được chèn bởi trường picture merge field?

Sử dụng MergeFieldImageDimension, được xây dựng bằng một giá trị điểm hoặc một giá trị cộng với một MergeFieldImageDimensionUnit rõ ràng (Point hoặc Percent).


API Reference Tóm tắt

Lớp / Phương thứcMô tả
FieldMergeFieldMERGEFIELD trường: FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped
FieldAddressBlockADDRESSBLOCK trường: các thuộc tính định dạng địa chỉ
FieldGreetingLinetrường GREETINGLINE: thuộc tính định dạng lời chào
FieldDatabasetrường DATABASE: Connection, Query, FileName, TableFormat
IFieldDatabaseProviderCung cấp kết quả truy vấn cho các trường DATABASE thông qua GetQueryResult()
FieldNextIf / FieldSkipIfNEXTIF / SKIPIF trường hợp hợp nhất có điều kiện
MergeFieldImageDimensionChiều rộng/chiều cao cho hình ảnh trường hợp trộn
Document.MailMergeSettingsDữ liệu cấu hình mail-merge đã được lưu (không phải kết nối dữ liệu trực tiếp)

Xem thêm

 Tiếng Việt