Combinar correspondencia
Combinar correspondencia
Esta guía muestra cómo trabajar con códigos de campo de combinación de correspondencia y datos de configuración de combinación de correspondencia en Aspose.Words FOSS para .NET, y dónde se encuentra el límite con la ejecución de la combinación. Aspose.Words FOSS para .NET reconoce y actualiza los códigos de campo de combinación de correspondencia de Word — ADDRESSBLOCK, DATABASE, GREETINGLINE, MERGEFIELD, NEXTIF, y SKIPIF — como parte de su motor de evaluación de campos, y puede leer los datos de configuración de combinación de correspondencia (MailMergeSettings) persistidos dentro de un documento. Ejecutar una combinación real contra una fuente de datos externa para generar documentos de salida poblados — el MailMerge.Execute() flujo de trabajo familiar del producto comercial — está not implementado en esta edición; no MailMerge existe clase de ejecución en la superficie actual de API.
MERGEFIELD — Lectura y Modificación de Marcadores de Combinar
FieldMergeField implementa el campo MERGEFIELD. FieldName y FieldNameNoPrefix devuelven el nombre de columna subyacente de la fuente de datos al que está vinculado el campo, TextBefore/TextAfter contienen texto literal envuelto alrededor del valor combinado, y IsMapped/IsVerticalFormatting informan el mapeo del campo de combinación y las banderas de diseño. Como todo tipo de campo, admite GetFieldCode(), Update(), Unlink() y Remove().
ADDRESSBLOCK y GREETINGLINE
FieldAddressBlock implementa el campo ADDRESSBLOCK, con FormatAddressOnCountryOrRegion, IncludeCountryOrRegionName, ExcludedCountryOrRegionName, NameAndAddressFormat y LanguageId controlando cómo se formatea la dirección del destinatario. FieldGreetingLine implementa GREETINGLINE, con AlternateText, NameFormat y LanguageId controlando el texto de saludo.
Campo DATABASE
FieldDatabase implementa el campo DATABASE, exponiendo los detalles de conexión almacenados en el campo: Connection, FileName, Query, TableFormat, InsertHeadings, InsertOnceOnMailMerge, FirstRecord y LastRecord. Para proporcionar resultados de consulta cuando este campo se actualiza, implemente IFieldDatabaseProvider y su método GetQueryResult(fileName, connection, query, field), luego asígnelo a Document.FieldOptions.FieldDatabaseProvider antes de llamar a Update(). La propiedad Connection debe establecerse — sin ella, Update() no tiene una fuente de datos para consultar.
Campos de combinación condicional — NEXTIF y SKIPIF
FieldNextIf y FieldSkipIf implementan los campos NEXTIF y SKIPIF, cada uno exponiendo LeftExpression, ComparisonOperator y RightExpression para la prueba condicional. Document.FieldOptions.ComparisonExpressionEvaluator (un IComparisonExpressionEvaluator) puede sobrescribir cómo se evalúan estas expresiones condicionales.
Dimensionado del campo de combinación de imagen
MergeFieldImageDimension representa un ancho o alto para una imagen insertada mediante un campo de combinación de imagen, construida como new MergeFieldImageDimension(value) (en puntos) o new MergeFieldImageDimension(value, unit) con un MergeFieldImageDimensionUnit explícito (Point o Percent). Sus propiedades Value y Unit son ambas modificables.
Qué está dentro del alcance y qué no
Document.MailMergeSettings devuelve un MailMergeSettings objeto que modela la configuración de combinación de correspondencia OOXML persiste dentro de un documento — DataSource, ConnectString, Query, MainDocumentType, DataType, Destination, CheckErrors, y la configuración del Office Data Source Object (ODSO) a través de OdsoFieldMapData/OdsoRecipientData colecciones. Esta es la configuración data que lleva el documento, no una conexión en tiempo real: leer y escribir MailMergeSettings no se conecta a una base de datos, hoja de cálculo o lista de direcciones, y esta edición no tiene MailMerge clase de ejecución para ejecutar una combinación y producir documentos de salida poblados a partir de ella. Lo que sí admite esta edición es la capa a nivel de campo superior: reconocer, leer, actualizar y modificar los propios códigos de campos de combinación dentro de un solo documento mediante el motor de evaluación de campos.
Consejos y mejores prácticas
- Trate
MailMergeSettingscomo metadatos del documento que puede leer y reenviar, no como un API para conectar con datos externos — no hay motor de ejecución detrás en esta edición. - Siempre establezca
FieldDatabase.Connectionantes de llamar aUpdate()en un campoDATABASE, o la actualización no tendrá nada que consultar. - Implemente
IFieldDatabaseProvideruna sola vez y asígnelo medianteDocument.FieldOptions.FieldDatabaseProviderpara centralizar cómo todos los camposDATABASEen un documento resuelven sus datos. - Utilice
FieldMergeField.FieldNamepara leer a qué columna de origen de datos está vinculada unaMERGEFIELDantes de decidir cómo procesarla programáticamente.
Problemas comunes
| Problema | Causa | Corregir |
|---|---|---|
FieldDatabase.Update() no devuelve datos | Connection no está configurado, o no hay IFieldDatabaseProvider registrado | Establece Connection y asigna Document.FieldOptions.FieldDatabaseProvider antes de actualizar |
Se esperaba un MailMerge.Execute() estilo API | La ejecución de fusión contra una fuente de datos externa no está implementada en esta edición FOSS | Trabaja con las clases de campos de fusión directamente (FieldMergeField, FieldDatabase, etc.) dentro de un solo documento, o utiliza el Aspose.Words comercial para .NET para una ejecución completa de fusión |
Las condiciones NEXTIF/SKIPIF se evalúan inesperadamente | La evaluación predeterminada de la expresión de comparación no coincide con la semántica esperada | Implementa IComparisonExpressionEvaluator y asígnalo a Document.FieldOptions.ComparisonExpressionEvaluator |
FAQ
¿Puedo ejecutar una combinación de correspondencia contra un CSV o una base de datos en esta edición?
No. Esta edición implementa los códigos de campos de combinación de correspondencia y el modelo de datos de configuración MailMergeSettings, pero no hay una clase de ejecución MailMerge para conectar a una fuente de datos externa y generar documentos poblados.
¿Qué puedo hacer realmente con los campos MERGEFIELD, entonces?
Puedes leerlos y modificarlos directamente — FieldMergeField.FieldName para el nombre de columna enlazado, TextBefore/TextAfter para el texto literal circundante, y Update()/Unlink()/Remove() como cualquier otro campo — dentro del documento actual.
¿Es MailMergeSettings inútil sin la ejecución de la combinación?
No — sigue siendo útil para leer o hacer round-tripping de la configuración de combinación de correspondencia almacenada en un documento, como DataSource, Query o MainDocumentType, aunque esta edición no actúa sobre esa configuración para ejecutar una combinación.
¿Cómo suministro datos para un campo DATABASE?
Implementa IFieldDatabaseProvider.GetQueryResult(fileName, connection, query, field) y asigna tu implementación a Document.FieldOptions.FieldDatabaseProvider antes de llamar a Update().
¿Cómo controlo el tamaño de una imagen insertada por un campo de combinación de imagen?
Utiliza MergeFieldImageDimension, construido con un valor de punto o un valor más un MergeFieldImageDimensionUnit explícito (Point o Percent).
API Reference Resumen
| Clase / Método | Descripción |
|---|---|
FieldMergeField | MERGEFIELD campo: FieldName, FieldNameNoPrefix, TextBefore, TextAfter, IsMapped |
FieldAddressBlock | ADDRESSBLOCK campo: propiedades de formato de dirección |
FieldGreetingLine | GREETINGLINE campo: propiedades de formato de saludo |
FieldDatabase | DATABASE campo: Connection, Query, FileName, TableFormat |
IFieldDatabaseProvider | Proporciona resultados de consulta para campos DATABASE mediante GetQueryResult() |
FieldNextIf / FieldSkipIf | NEXTIF / SKIPIF campos de fusión condicional |
MergeFieldImageDimension | Ancho/alto para imágenes de campos de combinación de fotos |
Document.MailMergeSettings | Datos de configuración de combinación de correspondencia persistentes (no una conexión de datos en tiempo real) |