Construiți un tabel dintr-un DataTable
Adesea, aplicația dvs. va extrage date dintr-o bază de date și le va stoca sub forma unui DataTable. Poate doriți să inserați cu ușurință aceste date în documentul dvs. ca un tabel nou și să aplicați rapid formatarea întregului tabel.
Folosind Aspose.Words, puteți prelua cu ușurință date dintr-o bază de date și le puteți stoca ca tabel:
- Creați un nou obiect DocumentBuilder pe Document.
- Începeți un nou tabel folosind DocumentBuilder.
- Dacă dorim să inserăm numele fiecărei coloane din DataTable Ca rând de antet, atunci iterăm prin fiecare coloană de date și scriem numele coloanelor într-un rând din tabel.
- Itera prin fiecare DataRow în DataTable:
- Iterați prin fiecare obiect din DataRow.
- Introduceți obiectul în document folosind DocumentBuilder. Metoda utilizată depinde de tipul obiectului inserat, de exemplu DocumentBuilder.writeln() pentru text și DocumentBuilder.insertImage() pentru o matrice de octeți care reprezintă o imagine.
- La sfârșitul procesării rândului de date se termină și rândul creat de DocumentBuilder Folosind DocumentBuilder.endRow().
- Odată ce toate rândurile din DataTable au fost procesate, terminați tabelul apelând DocumentBuilder.endTable().
- În cele din urmă, putem seta stilul de tabel dorit folosind una dintre proprietățile corespunzătoare ale tabelului, cum ar fi Table.getStyleIdentifier(), pentru a aplica automat formatarea întregului tabel. Următoarele date din DataTable sunt utilizate în acest exemplu:
Următorul exemplu de cod arată cum se execută algoritmul de mai sus în 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 poate fi apoi apelată cu ușurință folosind DocumentBuilder și datele.
Următorul exemplu de cod arată cum să importați datele dintr-un DataTable
și să le introduceți într - un nou tabel din 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"); |
Tabelul prezentat în imaginea de mai jos este produs prin rularea codului de mai sus.