Проведение исследований для ASPOSE.Words. Все отлично работает, осталось последнее. Вопрос в том, как сделать таблицу внутри таблицы? В документации по вложенной таблице образцы данных тесно связаны с презентацией. слой. Мне нужно разделение данных и уровня представления. Итак, небольшой тест:
[Test]
public void CreateDocumentRecurentalTableInTableTest()
{
// Structural items are in [], values/data in {}
//GIVEN (presentation layer)
const string FileName = "_6CreateDocumentRecurentalTableInTableTest.txt";
var doc = new Document();
var builder = new DocumentBuilder(doc);
builder.Writeln("TEST -- START");
builder.InsertField(@"MERGEFIELD TableStart:[MyTable] MERGEFORMAT");
builder.InsertField(@"MERGEFIELD [MyTableCol1] \* MERGEFORMAT");
builder.InsertField(@"MERGEFIELD [MyTableCol2] \* MERGEFORMAT");
builder.InsertField(@"MERGEFIELD TableStart:[SubTable] MERGEFORMAT");
builder.InsertField(@"MERGEFIELD [SubTable.Col1] \* MERGEFORMAT");
builder.InsertField(@"MERGEFIELD [SubTable.Col2] \* MERGEFORMAT");
builder.InsertField(@"MERGEFIELD TableEnd:[SubTable] MERGEFORMAT");
builder.InsertField(@"MERGEFIELD TableEnd:[MyTable] MERGEFORMAT");
builder.Writeln("\nTEST -- END");
//WHEN (Data layer)
using (var dt2 = new DataTable("[SubTable]"))
{
dt2.Columns.Add("[SubTable.Col1]");
dt2.Columns.Add("[SubTable.Col2]");
dt2.Rows.Add(" {SubTable.Row1.Cont1} ", " {SubTable.Row1.Cont2} ");
dt2.Rows.Add(" {SubTable.Row2.Cont1} ", " {SubTable.Row2.Cont2} ");
dt2.Rows.Add(" {SubTable.Row3.Cont1} ", " {SubTable.Row3.Cont2} ");
using (var dt = new DataTable("[MyTable]"))
{
dt.Columns.Add("[MyTableCol1]");
dt.Columns.Add("[MyTableCol2]");
dt.Rows.Add(" {MyTable.firstRow} ", dt2);
doc.MailMerge.ExecuteWithRegions(dt);
doc.Save(FileName, SaveFormat.Text);
}
}
//THEN
//Assert...
}
Получение результата:
TEST -- START
{MyTable.firstRow} [SubTable]«TableStart:[SubTable]»«[SubTable.Col1]»«[SubTable.Col2]»«TableEnd:[SubTable]»
TEST -- END
Чего я пытаюсь достичь:
TEST -- START
{MyTable.firstRow} {SubTable.Row1.Cont1} {SubTable.Row1.Cont2}
{SubTable.Row2.Cont1} {SubTable.Row2.Cont2}
{SubTable.Row3.Cont1} {SubTable.Row3.Cont2}
{MyTable.nextRow}
TEST -- END
Если обе таблицы хранятся в DataSet.Tables, то для каждой таблицы отображается несколько раз:
TEST -- START
{MyTable.firstRow} {SubTable.Row1.Cont1} {SubTable.Row1.Cont2}
{MyTable.firstRow} {SubTable.Row2.Cont1} {SubTable.Row2.Cont2}
{MyTable.firstRow} {SubTable.Row3.Cont1} {SubTable.Row3.Cont2}
{MyTable.nextRow} {SubTable.Row1.Cont1} {SubTable.Row1.Cont2}
{MyTable.nextRow} {SubTable.Row2.Cont1} {SubTable.Row2.Cont2}
{MyTable.nextRow} {SubTable.Row3.Cont1} {SubTable.Row3.Cont2}
TEST -- END