Construye una tabla a partir de DataTable

Contents
[ ]

A menudo, su aplicación extraerá datos de una base de datos y los almacenará en forma de DataTable. Es posible que desee insertar fácilmente estos datos en su documento como una nueva tabla y aplicar formato rápidamente a toda la tabla.

Usando Aspose.Words, puede recuperar fácilmente datos de una base de datos y almacenarlos como una tabla:

  1. Cree un nuevo objeto DocumentBuilder en su Document.
  2. Inicie una nueva tabla usando DocumentBuilder.
  3. Si queremos insertar los nombres de cada una de las columnas de nuestro DataTable como fila de encabezado, itere a través de cada columna de datos y escriba los nombres de las columnas en una fila de la tabla.
  4. Iterar a través de cada DataRow en el DataTable:
    1. Iterar a través de cada objeto en el DataRow.
    2. Inserte el objeto en el documento usando DocumentBuilder. El método utilizado depende del tipo de objeto que se inserte, por ejemplo, DocumentBuilder.writeln() para texto y DocumentBuilder.insertImage() para una matriz de bytes que representa una imagen.
    3. Al final del procesamiento de la fila de datos, también finaliza la fila creada por DocumentBuilder usando DocumentBuilder.endRow().
  5. Una vez que se hayan procesado todas las filas de DataTable, finalice la tabla llamando a DocumentBuilder.endTable().
  6. Finalmente, podemos establecer el estilo de tabla deseado usando una de las propiedades de tabla apropiadas, como Table.getStyleIdentifier(), para aplicar formato automáticamente a toda la tabla. Los siguientes datos en nuestro DataTable se usan en este ejemplo:

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

El siguiente ejemplo de código muestra cómo ejecutar el algoritmo anterior en 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;
}

Luego, se puede llamar fácilmente al método usando su DocumentBuilder y sus datos.

El siguiente ejemplo de código muestra cómo importar los datos de un DataTable e insertarlos en una nueva tabla del 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");

La tabla que se muestra en la imagen a continuación se produce ejecutando el código anterior.

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