Construir uma tabela a partir de um DataTable

Contents
[ ]

Muitas vezes, seu aplicativo extrai dados de um banco de dados e os armazena na forma de DataTable. Poderá querer inserir facilmente estes dados no seu documento como uma nova tabela e aplicar rapidamente a formatação a toda a tabela.

Usando Aspose.Words, você pode facilmente recuperar dados de um banco de dados e armazená-los como uma tabela:

  1. Crie um novo objeto DocumentBuilder no seu Document.
  2. Inicie uma nova tabela usando DocumentBuilder.
  3. Se quisermos inserir os nomes de cada uma das colunas do nosso DataTable como uma linha de cabeçalho, em seguida, iterar através de cada coluna de dados e escrever os nomes das colunas em uma linha na tabela.
  4. Iterar através de cada DataRow no DataTable:
    1. Iterar através de cada objecto no DataRow.
    2. Insira o objecto no documento utilizando DocumentBuilder. O método utilizado depende do tipo do objecto que está a ser inserido, por exemplo, DocumentBuilder.writeln() para texto e DocumentBuilder.insertImage() para uma matriz de bytes que representa uma imagem.
    3. No final do processamento da linha de dados, também termina a linha que está sendo criada pelo DocumentBuilder Usando DocumentBuilder.endRow().
  5. Uma vez que todas as linhas do DataTable tenham sido processadas, termine a tabela chamando DocumentBuilder.endTable().
  6. Finalmente, podemos definir o estilo de tabela desejado usando uma das propriedades de tabela apropriadas, como Table.getStyleIdentifier(), para aplicar automaticamente a formatação a toda a tabela. Os seguintes dados em nosso DataTable são usados neste exemplo:

build-a-table-from-a-datatable-aspose-words-java-1

O exemplo de código a seguir mostra como executar o algoritmo acima em Aspose.Words:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
/// <summary>
/// Imports the content from the specified DataTable into a new Aspose.Words Table object.
/// The table is inserted at the document builder's current position and using the current builder's formatting if any is defined.
/// </summary>
public Table importTableFromDataTable(DocumentBuilder builder, DataTable dataTable,
boolean importColumnHeadings)
{
Table table = builder.startTable();
// Check if the columns' names from the data source are to be included in a header row.
if (importColumnHeadings)
{
// Store the original values of these properties before changing them.
boolean boldValue = builder.getFont().getBold();
int paragraphAlignmentValue = builder.getParagraphFormat().getAlignment();
// Format the heading row with the appropriate properties.
builder.getFont().setBold(true);
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
// Create a new row and insert the name of each column into the first row of the table.
for (DataColumn column : dataTable.getColumns())
{
builder.insertCell();
builder.writeln(column.getColumnName());
}
builder.endRow();
// Restore the original formatting.
builder.getFont().setBold(boldValue);
builder.getParagraphFormat().setAlignment(paragraphAlignmentValue);
}
for (DataRow dataRow : (Iterable<DataRow>) dataTable.getRows())
{
for (Object item : dataRow.getItemArray())
{
// Insert a new cell for each object.
builder.insertCell();
switch (item.getClass().getName())
{
case "DateTime":
// Define a custom format for dates and times.
Date dateTime = (Date) item;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM d, yyyy");
builder.write(simpleDateFormat.format(dateTime));
break;
default:
// By default any other item will be inserted as text.
builder.write(item.toString());
break;
}
}
// After we insert all the data from the current record, we can end the table row.
builder.endRow();
}
// We have finished inserting all the data from the DataTable, we can end the table.
builder.endTable();
return table;
}

O método pode então ser facilmente chamado usando seu DocumentBuilder e dados.

O exemplo de código a seguir mostra como importar os dados de um DataTable e inseri - los em uma nova tabela no documento:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document();
// We can position where we want the table to be inserted and specify any extra formatting to the table.
DocumentBuilder builder = new DocumentBuilder(doc);
// We want to rotate the page landscape as we expect a wide table.
doc.getFirstSection().getPageSetup().setOrientation(Orientation.LANDSCAPE);
DataSet ds = new DataSet();
ds.readXml(getMyDir() + "List of people.xml");
// Retrieve the data from our data source, which is stored as a DataTable.
DataTable dataTable = ds.getTables().get(0);
// Build a table in the document from the data contained in the DataTable.
Table table = importTableFromDataTable(builder, dataTable, true);
// We can apply a table style as a very quick way to apply formatting to the entire table.
table.setStyleIdentifier(StyleIdentifier.MEDIUM_LIST_2_ACCENT_1);
table.setStyleOptions(TableStyleOptions.FIRST_ROW | TableStyleOptions.ROW_BANDS | TableStyleOptions.LAST_COLUMN);
// For our table, we want to remove the heading for the image column.
table.getFirstRow().getLastCell().removeAllChildren();
doc.save(getArtifactsDir() + "WorkingWithTables.BuildTableFromDataTable.docx");

A tabela mostrada na figura abaixo é produzida executando o código acima.

build-a-table-from-a-datatable-aspose-words-java-2