Execute

Execute(IMailMergeDataSource)

Выполняет слияние почты из пользовательского источника данных.

public void Execute(IMailMergeDataSource dataSource)
ПараметрТипОписание
dataSourceIMailMergeDataSourceОбъект, реализующий пользовательский интерфейс источника данных слияния почты.

Примечания

Используйте этот метод, чтобы заполнить поля слияния почты в документе значениями из любого источника данных, такого как список, хэш-таблица или объекты. Вам нужно написать собственный класс your , реализующийIMailMergeDataSource интерфейс.

Вы можете использовать этот метод только тогда, когдаIsBidiTextSupportedOnUpdate являетсяЛОЖЬ, то есть вам не нужна совместимость с языками с письмом справа налево (например, арабским или ивритом).

Этот метод игнорируетRemoveUnusedRegions вариант.

Смотрите также


Execute(string[], object[])

Выполняет операцию слияния почты для одной записи.

public void Execute(string[] fieldNames, object[] values)
ПараметрТипОписание
fieldNamesString[]Массив имен полей слияния. Имена полей не чувствительны к регистру. Если встречается имя поля, которого нет в документе, оно игнорируется.
valuesObject[]Массив значений, которые будут вставлены в поля слияния. Количество элементов в этом массиве должно быть таким же, как количество элементов вfieldNames.

Примечания

Используйте этот метод для заполнения полей слияния почты в документе значениями из массива объектов.

Этот метод объединяет данные только для одной записи. Массив полей name и массив значений представляют данные одной записи.

Этот метод не использует регионы слияния почты.

Этот метод игнорируетRemoveUnusedRegions вариант.

Примеры

Показывает, как объединить изображение из URI в качестве данных слияния почты в MERGEFIELD.

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

// MERGEFIELD с тегами «Image:» получит изображение во время слияния почты.
// Строка после двоеточия в теге "Image:" соответствует имени столбца
// в источнике данных, ячейки которого содержат URI файлов изображений.
builder.InsertField("MERGEFIELD  Image:logo_FromWeb ");
builder.InsertField("MERGEFIELD  Image:logo_FromFileSystem ");

 // Создаем источник данных, содержащий URI изображений, которые мы объединим.
// URI может быть веб-URL, указывающим на изображение, или именем файла изображения в локальной файловой системе.
string[] columns = { "logo_FromWeb", "logo_FromFileSystem" };
object[] URIs = { ImageUrl, ImageDir + "Logo.jpg" };

// Выполняем слияние почты для источника данных с одной строкой.
doc.MailMerge.Execute(columns, URIs);

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

Показывает, как выполнить слияние почты, а затем сохранить документ в клиентском браузере.

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" });

// Отправляем документ в клиентский браузер.
Assert.That(() => doc.Save(response, "Artifacts/MailMerge.ExecuteArray.docx", ContentDisposition.Inline, null),
    Throws.TypeOf<ArgumentNullException>()); //Выбрасывается, потому что HttpResponse в тесте имеет значение null.

// Нам нужно будет закрыть этот ответ вручную, чтобы гарантировать, что мы не добавим в документ лишний контент после сохранения.
Assert.That(() => response.End(), Throws.TypeOf<NullReferenceException>());

Смотрите также


Execute(DataTable)

Выполняет слияние почты из DataTable в документ.

public void Execute(DataTable table)
ПараметрТипОписание
tableDataTableТаблица, содержащая данные для вставки в поля слияния почты. Имена полей не чувствительны к регистру. Если встречается имя поля, которого нет в документе, оно игнорируется.

Примечания

Используйте этот метод для заполнения полей слияния почты в документе значениями из a .Таблица данных.

Все записи из таблицы объединяются в документ.

Вы можете использовать поле NEXT в документе Word, чтобы вызватьMailMerge объект для выбора следующей записи изТаблица данных и продолжить объединение. Это можно использовать при создании документов, таких как почтовые этикетки.

КогдаMailMerge объект достигает конца основного документа, и в нем еще осталось строк more Таблица данных, он копирует все содержимое основного документа и добавляет его в конец целевого документа, используя разрывsection в качестве разделителя.

Этот метод игнорируетRemoveUnusedRegions вариант.

Примеры

Показывает, как выполнить слияние почты с данными из 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" });

    // Ниже приведены два способа использования DataTable в качестве источника данных для слияния почты.
    // 1 — использовать всю таблицу для слияния почты, чтобы создать один выходной документ слияния почты для каждой строки в таблице:
    Document doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table);

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

    // 2 — использовать одну строку таблицы для создания одного выходного документа слияния почты:
    doc = CreateSourceDocExecuteDataTable();

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

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

/// <summary>
/// Создает исходный документ слияния почты.
/// </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;
}

Смотрите также


Execute(IDataReader)

Выполняет слияние почты изИдатаридер в документ.

public void Execute(IDataReader dataReader)
ПараметрТипОписание
dataReaderIDataReaderИсточник данных для операции слияния почты.

Примечания

Вы можете пройтиSqlDataReader илиОлеДбDataReader объект в метод this в качестве параметра, поскольку они оба реализовалиИдатаридер интерфейс.

Обратите внимание, что этот метод не использует регионы слияния почты, и для нескольких записей документ the будет увеличиваться, повторяя весь документ.

Этот метод игнорируетRemoveUnusedRegions вариант.

Примеры

Показывает, как запустить слияние почты, используя данные из устройства чтения данных.

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");

// Создаем строку подключения, указывающую на файл базы данных "Борей"
// в нашей локальной файловой системе открываем соединение и настраиваем 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))
{
    // Создайте команду SQL, которая будет источником данных для нашего слияния почты.
    // Имена столбцов таблицы, которые вернет этот оператор SELECT
    // должно соответствовать полям слияния, которые мы разместили выше.
    OleDbCommand command = new OleDbCommand(query, connection);
    command.CommandText = query;
    try
    {                    
        connection.Open();                 
        using (OleDbDataReader reader = command.ExecuteReader())
        {
            // Берём данные из считывателя и используем их при слиянии почты.
            doc.MailMerge.Execute(reader);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }                
}

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

Смотрите также


Execute(DataView)

Выполняет слияние почты изПросмотр данных в документ.

public void Execute(DataView dataView)
ПараметрТипОписание
dataViewDataViewИсточник данных для операции слияния почты.

Примечания

Этот метод полезен, если вы извлекаете данные вТаблица данных но тогда необходимо применить фильтр или сортировку перед слиянием почты.

Обратите внимание, что этот метод не использует регионы слияния почты, и для нескольких записей документ the будет увеличиваться, повторяя весь документ.

Этот метод игнорируетRemoveUnusedRegions вариант.

Примеры

Показывает, как редактировать данные слияния почты с помощью 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");

// Создайте таблицу данных, из которой наше слияние почты будет получать данные.
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" });

// Мы можем использовать представление данных, чтобы изменить данные слияния почты, не внося изменений в саму таблицу данных.
DataView view = new DataView(table);
view.Sort = "Grade DESC";
view.RowFilter = "Grade >= 50";

// Наше представление данных сортирует записи в порядке убывания по столбцу «Оценка».
// и отфильтровывает строки со значениями менее 50 в этом столбце.
// Три из четырех строк соответствуют этим критериям, поэтому выходной документ будет содержать три документа слияния.
doc.MailMerge.Execute(view);

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

Смотрите также


Execute(DataRow)

Выполняет слияние почты изСтрока данных в документ.

public void Execute(DataRow row)
ПараметрТипОписание
rowDataRowСтрока, содержащая данные для вставки в поля слияния почты. Имена полей не чувствительны к регистру. Если встречается имя поля, которого нет в документе, оно игнорируется.

Примечания

Используйте этот метод, чтобы заполнить поля слияния в документе значениями изСтрока данных.

Этот метод игнорируетRemoveUnusedRegions вариант.

Примеры

Показывает, как выполнить слияние почты с данными из 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" });

    // Ниже приведены два способа использования DataTable в качестве источника данных для слияния почты.
    // 1 — использовать всю таблицу для слияния почты, чтобы создать один выходной документ слияния почты для каждой строки в таблице:
    Document doc = CreateSourceDocExecuteDataTable();

    doc.MailMerge.Execute(table);

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

    // 2 — использовать одну строку таблицы для создания одного выходного документа слияния почты:
    doc = CreateSourceDocExecuteDataTable();

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

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

/// <summary>
/// Создает исходный документ слияния почты.
/// </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;
}

Смотрите также