Construire une table à partir d'un DataTable

Contents
[ ]

Souvent, votre application extrait des données d’une base de données et les stocke sous la forme d’un DataTable. Vous souhaiterez peut-être insérer facilement ces données dans votre document en tant que nouveau tableau et appliquer rapidement une mise en forme à l’ensemble du tableau.

En utilisant Aspose.Words, vous pouvez facilement récupérer des données à partir d’une base de données et les stocker sous forme de table:

  1. Créez un nouvel objet DocumentBuilder sur votre Document.
  2. Commencez une nouvelle table en utilisant DocumentBuilder.
  3. Si nous voulons insérer les noms de chacune des colonnes de notre DataTable en tant que ligne d’en-tête, parcourez chaque colonne de données et écrivez les noms des colonnes dans une ligne du tableau.
  4. Parcourez chaque DataRow dans le DataTable:
    1. Parcourez chaque objet dans le DataRow.
    2. Insérez l’objet dans le document en utilisant DocumentBuilder. La méthode utilisée dépend du type de l’objet inséré, par exemple DocumentBuilder.writeln() pour le texte et DocumentBuilder.insertImage() pour un tableau d’octets qui représente une image.
    3. À la fin du traitement de la ligne de données, terminez également la ligne créée par le DocumentBuilder en utilisant DocumentBuilder.endRow().
  5. Une fois que toutes les lignes du DataTable ont été traitées, terminez la table en appelant DocumentBuilder.endTable().
  6. Enfin, nous pouvons définir le style de tableau souhaité à l’aide de l’une des propriétés de tableau appropriées telles que Table.getStyleIdentifier() pour appliquer automatiquement la mise en forme à l’ensemble du tableau. Les données suivantes dans notre DataTable sont utilisées dans cet exemple:

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

L’exemple de code suivant montre comment exécuter l’algorithme ci-dessus dans 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;
}

La méthode peut ensuite être facilement appelée en utilisant votre DocumentBuilder et vos données.

L’exemple de code suivant montre comment importer les données d’un DataTable et les insérer dans une nouvelle table du document:

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

Le tableau présenté dans l’image ci-dessous est produit en exécutant le code ci-dessus.

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