Zbuduj stół z DataTable
Często Twoja aplikacja będzie pobierać dane z bazy danych i przechowywać je w formie DataTable. Można łatwo umieścić te dane w dokumencie jako nową tabelę i szybko zastosować formatowanie do całej tabeli.
Stosowanie Aspose.Words, można łatwo pobrać dane z bazy danych i przechowywać je jako tabelę:
- Utwórz nowy DocumentBuilder obiekt na Twoim Document.
- Uruchom nową tabelę używając DocumentBuilder.
- Jeśli chcemy dodać nazwy każdej kolumny z naszej DataTable jako wiersz nagłówka następnie iterate przez każdą kolumnę danych i zapisać nazwy kolumn do wiersza w tabeli.
- Iterate przez każdy DataRow w DataTable:
- Iterate przez każdy obiekt w DataRow.
- Wstaw obiekt do dokumentu używając DocumentBuilder. Zastosowana metoda zależy od typu wstawianego obiektu np. DocumentBuilder.writeln() dla tekstu oraz DocumentBuilder.insertImage() dla tablicy bajtów, która reprezentuje obraz.
- Na koniec przetwarzania wiersza danych kończy się również wiersz tworzony przez DocumentBuilder za pomocą DocumentBuilder.endRow().
- Raz wszystkie rzędy z DataTable zostały przetworzone zakończyć stół przez wywołanie DocumentBuilder.endTable().
- Wreszcie, możemy ustawić pożądany styl tabeli przy użyciu jednej z odpowiednich właściwości tabeli, takich jak Table.getStyleIdentifier() automatycznie stosować formatowanie do całej tabeli. Poniższe dane w naszym DataTable jest stosowany w tym przykładzie:
Poniższy przykład kodu pokazuje jak wykonać powyższy algorytm w 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; | |
} |
Metoda ta może być łatwo wywołana za pomocą DocumentBuilder i dane.
Poniższy przykład kodu pokazuje, jak importować dane z DataTable
i umieścić go w nowej tabeli w dokumencie:
// 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"); |
Tabela pokazana na poniższym obrazku jest wytwarzana przez uruchomienie powyższego kodu.