Execute

Execute(IMailMergeDataSource)

Realiza una combinación de correspondencia desde una fuente de datos personalizada.

public void Execute(IMailMergeDataSource dataSource)
ParámetroEscribeDescripción
dataSourceIMailMergeDataSourceUn objeto que implementa la interfaz de origen de datos de combinación de correspondencia personalizada.

Observaciones

Utilice este método para completar campos de combinación de correspondencia en el documento con valores de cualquier fuente de datos, como una lista, tabla hash u objetos. Necesitas escribir tu propia clase que implemente elIMailMergeDataSource interfaz.

Puede utilizar este método sólo cuandoIsBidiTextSupportedOnUpdate esFALSO, es decir, no necesita compatibilidad con idiomas de derecha a izquierda (como árabe o hebreo).

Este método ignora laRemoveUnusedRegions opción.

Ver también


Execute(string[], object[])

Realiza una operación de combinación de correspondencia para un solo registro.

public void Execute(string[] fieldNames, object[] values)
ParámetroEscribeDescripción
fieldNamesString[]Matriz de nombres de campos de combinación. Los nombres de los campos no distinguen entre mayúsculas y minúsculas. Si se encuentra un nombre de campo que no se encuentra en el documento, se ignora.
valuesObject[]Matriz de valores que se insertarán en los campos de combinación. El número de elementos de esta matriz debe ser el mismo que el número de elementos defieldNames.

Observaciones

Utilice este método para completar campos de combinación de correspondencia en el documento con valores de una matriz de objetos.

Este método combina datos de un solo registro. La matriz de nombres de campo y la matriz de valores representan los datos de un solo registro.

Este método no utiliza regiones de combinación de correspondencia.

Este método ignora laRemoveUnusedRegions opción.

Ejemplos

Muestra cómo fusionar una imagen de un URI como datos de combinación de correspondencia en un MERGEFIELD.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Los MERGEFIELD con etiquetas "Imagen:" recibirán una imagen durante una combinación de correspondencia.
// La cadena después de los dos puntos en la etiqueta "Imagen:" corresponde al nombre de una columna
// en la fuente de datos cuyas celdas contienen URI de archivos de imagen.
builder.InsertField("MERGEFIELD  Image:logo_FromWeb ");
builder.InsertField("MERGEFIELD  Image:logo_FromFileSystem ");

 // Crea una fuente de datos que contiene los URI de las imágenes que fusionaremos.
// Un URI puede ser una URL web que apunta a una imagen o un nombre de archivo del sistema de archivos local de un archivo de imagen.
string[] columns = { "logo_FromWeb", "logo_FromFileSystem" };
object[] URIs = { ImageUrl, ImageDir + "Logo.jpg" };

// Ejecutar una combinación de correspondencia en una fuente de datos con una fila.
doc.MailMerge.Execute(columns, URIs);

doc.Save(ArtifactsDir + "MailMergeEvent.ImageFromUrl.docx");

Muestra cómo realizar una combinación de correspondencia y luego guardar el documento en el navegador del cliente.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

builder.InsertField(" MERGEFIELD FullName ");
builder.InsertParagraph();
builder.InsertField(" MERGEFIELD Company ");
builder.InsertParagraph();
builder.InsertField(" MERGEFIELD Address ");
builder.InsertParagraph();
builder.InsertField(" MERGEFIELD City ");

doc.MailMerge.Execute(new string[] { "FullName", "Company", "Address", "City" },
    new object[] { "James Bond", "MI5 Headquarters", "Milbank", "London" });

// Envía el documento al navegador del cliente.
Assert.That(() => doc.Save(response, "Artifacts/MailMerge.ExecuteArray.docx", ContentDisposition.Inline, null),
    Throws.TypeOf<ArgumentNullException>()); // Lanzado porque HttpResponse es nulo en la prueba.

// Tendremos que cerrar esta respuesta manualmente para asegurarnos de no agregar ningún contenido superfluo al documento después de guardarlo.
Assert.That(() => response.End(), Throws.TypeOf<NullReferenceException>());

Ver también


Execute(DataTable)

Realiza combinación de correspondencia desde una tabla de datos en el documento.

public void Execute(DataTable table)
ParámetroEscribeDescripción
tableDataTableTabla que contiene datos que se insertarán en los campos de combinación de correspondencia. Los nombres de los campos no distinguen entre mayúsculas y minúsculas. Si se encuentra un nombre de campo que no se encuentra en el documento, se ignora.

Observaciones

Utilice este método para completar los campos de combinación de correspondencia en el documento con valores de a Tabla de datos.

Todos los registros de la tabla se fusionan en el documento.

Puede utilizar el campo SIGUIENTE en el documento de Word para provocarMailMerge objeto para seleccionar siguiente registro delTabla de datos y continuar fusionando. Esto se puede utilizar al crear documentos como etiquetas postales.

CuandoMailMerge El objeto llega al final del documento principal y todavía hay más filas en elTabla de datos, copia el contenido completo de el documento principal y lo agrega al final del documento de destino usando un salto de sección como separador.

Este método ignora laRemoveUnusedRegions opción.

Ejemplos

Muestra cómo ejecutar una combinación de correspondencia con datos de un DataTable.

public void ExecuteDataTable()
{
    DataTable table = new DataTable("Test");
    table.Columns.Add("CustomerName");
    table.Columns.Add("Address");
    table.Rows.Add(new object[] { "Thomas Hardy", "120 Hanover Sq., London" });
    table.Rows.Add(new object[] { "Paolo Accorti", "Via Monte Bianco 34, Torino" });

    // A continuación se muestran dos formas de utilizar una tabla de datos como fuente de datos para una combinación de correspondencia.
    // 1 - Utilice toda la tabla para la combinación de correspondencia para crear un documento de combinación de correspondencia de salida para cada fila de la tabla:
    Document doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table);

    doc.Save(ArtifactsDir + "MailMerge.ExecuteDataTable.WholeTable.docx");

    // 2 - Utilice una fila de la tabla para crear un documento de combinación de correspondencia de salida:
    doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table.Rows[1]);

    doc.Save(ArtifactsDir + "MailMerge.ExecuteDataTable.OneRow.docx");
}

/// <summary>
/// Crea un documento fuente de combinación de correspondencia.
/// </summary>
private static Document CreateSourceDocExecuteDataTable()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.InsertField(" MERGEFIELD CustomerName ");
    builder.InsertParagraph();
    builder.InsertField(" MERGEFIELD Address ");

    return doc;
}

Ver también


Execute(IDataReader)

Realiza combinación de correspondencia desdeLector de datos en el documento.

public void Execute(IDataReader dataReader)
ParámetroEscribeDescripción
dataReaderIDataReaderFuente de datos para la operación de combinación de correspondencia.

Observaciones

Puedes pasarLector de datos SQL oLector de datos OleDb objeto en el método this como parámetro porque ambos implementaronLector de datos interfaz.

Tenga en cuenta que este método no utiliza regiones de combinación de correspondencia y, para registros múltiples, el documento crecerá repitiendo todo el documento.

Este método ignora laRemoveUnusedRegions opción.

Ejemplos

Muestra cómo ejecutar una combinación de correspondencia utilizando datos de un lector de datos.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

builder.Write("Product:\t");
builder.InsertField(" MERGEFIELD ProductName");
builder.Write("\nSupplier:\t");
builder.InsertField(" MERGEFIELD CompanyName");
builder.Writeln();
builder.InsertField(" MERGEFIELD QuantityPerUnit");
builder.Write(" for $");
builder.InsertField(" MERGEFIELD UnitPrice");

// Crea una cadena de conexión que apunta al archivo de base de datos "Northwind"
// en nuestro sistema de archivos local, abra una conexión y configure una consulta SQL.
string connectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" + DatabaseDir + "Northwind.accdb";
string query =
    @"SELECT Products.ProductName, Suppliers.CompanyName, Products.QuantityPerUnit, Products.UnitPrice
    FROM Products 
    INNER JOIN Suppliers 
    ON Products.SupplierID = Suppliers.SupplierID";

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    // Cree un comando SQL que generará datos para nuestra combinación de correspondencia.
    // Los nombres de las columnas de la tabla que devolverá esta instrucción SELECT
    // deberá corresponder a los campos de combinación que colocamos arriba.
    OleDbCommand command = new OleDbCommand(query, connection);
    command.CommandText = query;
    try
    {                    
        connection.Open();                 
        using (OleDbDataReader reader = command.ExecuteReader())
        {
            // Toma los datos del lector y úsalos en la combinación de correspondencia.
            doc.MailMerge.Execute(reader);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }                
}

doc.Save(ArtifactsDir + "MailMerge.ExecuteDataReader.docx");

Ver también


Execute(DataView)

Realiza combinación de correspondencia desde unVista de datos en el documento.

public void Execute(DataView dataView)
ParámetroEscribeDescripción
dataViewDataViewFuente de datos para la operación de combinación de correspondencia.

Observaciones

Este método es útil si recupera datos en unTabla de datos pero entonces necesita aplicar un filtro u ordenar antes de combinar correspondencia.

Tenga en cuenta que este método no utiliza regiones de combinación de correspondencia y, para registros múltiples, el documento crecerá repitiendo todo el documento.

Este método ignora laRemoveUnusedRegions opción.

Ejemplos

Muestra cómo editar datos de combinación de correspondencia con un DataView.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Write("Congratulations ");
builder.InsertField(" MERGEFIELD Name");
builder.Write(" for passing with a grade of ");
builder.InsertField(" MERGEFIELD Grade");

// Cree una tabla de datos de la que nuestra combinación de correspondencia obtendrá datos.
DataTable table = new DataTable("ExamResults");
table.Columns.Add("Name");
table.Columns.Add("Grade");
table.Rows.Add(new object[] { "John Doe", "67" });
table.Rows.Add(new object[] { "Jane Doe", "81" });
table.Rows.Add(new object[] { "John Cardholder", "47" });
table.Rows.Add(new object[] { "Joe Bloggs", "75" });

// Podemos usar una vista de datos para modificar los datos de combinación de correspondencia sin realizar cambios en la tabla de datos en sí.
DataView view = new DataView(table);
view.Sort = "Grade DESC";
view.RowFilter = "Grade >= 50";

// Nuestra vista de datos ordena las entradas en orden descendente a lo largo de la columna "Calificación"
// y filtra filas con valores inferiores a 50 en esa columna.
// Tres de las cuatro filas cumplen esos criterios, por lo que el documento de salida contendrá tres documentos combinados.
doc.MailMerge.Execute(view);

doc.Save(ArtifactsDir + "MailMerge.ExecuteDataView.docx");

Ver también


Execute(DataRow)

Realiza combinación de correspondencia desde unfila de datos en el documento.

public void Execute(DataRow row)
ParámetroEscribeDescripción
rowDataRowFila que contiene datos que se insertarán en los campos de combinación de correspondencia. Los nombres de los campos no distinguen entre mayúsculas y minúsculas. Si se encuentra un nombre de campo que no se encuentra en el documento, se ignora.

Observaciones

Utilice este método para completar campos de combinación de correspondencia en el documento con valores de unfila de datos.

Este método ignora laRemoveUnusedRegions opción.

Ejemplos

Muestra cómo ejecutar una combinación de correspondencia con datos de un DataTable.

public void ExecuteDataTable()
{
    DataTable table = new DataTable("Test");
    table.Columns.Add("CustomerName");
    table.Columns.Add("Address");
    table.Rows.Add(new object[] { "Thomas Hardy", "120 Hanover Sq., London" });
    table.Rows.Add(new object[] { "Paolo Accorti", "Via Monte Bianco 34, Torino" });

    // A continuación se muestran dos formas de utilizar una tabla de datos como fuente de datos para una combinación de correspondencia.
    // 1 - Utilice toda la tabla para la combinación de correspondencia para crear un documento de combinación de correspondencia de salida para cada fila de la tabla:
    Document doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table);

    doc.Save(ArtifactsDir + "MailMerge.ExecuteDataTable.WholeTable.docx");

    // 2 - Utilice una fila de la tabla para crear un documento de combinación de correspondencia de salida:
    doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table.Rows[1]);

    doc.Save(ArtifactsDir + "MailMerge.ExecuteDataTable.OneRow.docx");
}

/// <summary>
/// Crea un documento fuente de combinación de correspondencia.
/// </summary>
private static Document CreateSourceDocExecuteDataTable()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.InsertField(" MERGEFIELD CustomerName ");
    builder.InsertParagraph();
    builder.InsertField(" MERGEFIELD Address ");

    return doc;
}

Ver también