Gestire le tabelle di presentazione in Java
Introduzione
Una tabella in PowerPoint è un modo efficiente per visualizzare e rappresentare le informazioni. Le informazioni in una griglia di celle (disposte in righe e colonne) sono semplici e facili da comprendere.
Aspose.Slides fornisce la classe Table, l’interfaccia ITable, la classe Cell , l’interfaccia ICell e altri tipi per consentirti di creare, aggiornare e gestire le tabelle in tutti i tipi di presentazioni.
Creare una tabella da zero
- Crea un’istanza della classe Presentation.
- Ottieni il riferimento di una diapositiva attraverso il suo indice.
- Definisci un array di
columnWidth. - Definisci un array di
rowHeight. - Aggiungi un oggetto ITable alla diapositiva tramite il metodo addTable.
- Itera attraverso ogni ICell per applicare la formattazione ai bordi superiore, inferiore, destro e sinistro.
- Unisci le prime due celle della prima riga della tabella.
- Accedi al [TextFrame] di una ICell.
- Aggiungi del testo al TextFrame.
- Salva la presentazione modificata.
Questo codice Java mostra come creare una tabella in una presentazione:
// Istanzia una classe Presentation che rappresenta un file PPTX
Presentation pres = new Presentation();
try {
// Accede alla prima diapositiva
ISlide sld = pres.getSlides().get_Item(0);
// Definisce colonne con larghezze e righe con altezze
double[] dblCols = {50, 50, 50};
double[] dblRows = {50, 30, 30, 30, 30};
// Aggiunge una forma di tabella alla diapositiva
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// Imposta il formato del bordo per ogni cella
for (int row = 0; row < tbl.getRows().size(); row++)
{
for (int cell = 0; cell < tbl.getRows().get_Item(row).size(); cell++)
{
ICellFormat cellFormat = tbl.getRows().get_Item(row).get_Item(cell).getCellFormat();
cellFormat.getBorderTop().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderTop().setWidth(5);
cellFormat.getBorderBottom().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderBottom().setWidth(5);
cellFormat.getBorderLeft().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderLeft().setWidth(5);
cellFormat.getBorderRight().getFillFormat().setFillType(FillType.Solid);
cellFormat.getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
cellFormat.getBorderRight().setWidth(5);
}
}
// Unisce le celle 1 e 2 della riga 1
tbl.mergeCells(tbl.getRows().get_Item(0).get_Item(0), tbl.getRows().get_Item(1).get_Item(1), false);
// Aggiunge del testo alla cella unita
tbl.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Merged Cells");
// Salva la presentazione su disco
pres.save("table.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Numerazione in una tabella standard
In una tabella standard, la numerazione delle celle è semplice e parte da zero. La prima cella di una tabella è indicizzata come 0,0 (colonna 0, riga 0).
Ad esempio, le celle in una tabella con 4 colonne e 4 righe sono numerate in questo modo:
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
Questo codice Java mostra come specificare la numerazione delle celle in una tabella:
// Istanzia una classe Presentation che rappresenta un file PPTX
Presentation pres = new Presentation();
try {
// Accede alla prima diapositiva
ISlide sld = pres.getSlides().get_Item(0);
// Definisce colonne con larghezze e righe con altezze
double[] dblCols = { 70, 70, 70, 70 };
double[] dblRows = { 70, 70, 70, 70 };
// Aggiunge una forma di tabella alla diapositiva
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// Imposta il formato del bordo per ogni cella
for (IRow row : tbl.getRows())
{
for (ICell cell : row)
{
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderRight().setWidth(5);
}
}
// Salva la presentazione su disco
pres.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Accedere a una tabella esistente
-
Crea un’istanza della classe Presentation.
-
Ottieni un riferimento alla diapositiva contenente la tabella attraverso il suo indice.
-
Crea un oggetto ITable e impostalo a null.
-
Itera attraverso tutti gli oggetti IShape finché non trovi la tabella.
Se sospetti che la diapositiva in questione contenga una sola tabella, puoi semplicemente controllare tutte le forme che contiene. Quando una forma è identificata come tabella, puoi eseguirne il cast a oggetto Table. Ma se la diapositiva contiene diverse tabelle, è più opportuno cercare la tabella necessaria tramite il suo setAlternativeText(String value).
-
Utilizza l’oggetto ITable per lavorare con la tabella. Nell’esempio seguente, abbiamo aggiunto una nuova riga alla tabella.
-
Salva la presentazione modificata.
Questo codice Java mostra come accedere e lavorare con una tabella esistente:
// Istanzia la classe Presentation che rappresenta un file PPTX
Presentation pres = new Presentation("UpdateExistingTable.pptx");
try {
// Accede alla prima diapositiva
ISlide sld = pres.getSlides().get_Item(0);
// Inizializza TableEx a null
ITable tbl = null;
// Itera tra le forme e imposta un riferimento alla tabella trovata
for (IShape shp : sld.getShapes())
{
if (shp instanceof ITable)
{
tbl = (ITable) shp;
// Imposta il testo per la prima colonna della seconda riga
tbl.get_Item(0, 1).getTextFrame().setText("New");
}
}
// Salva la presentazione modificata su disco
pres.save("table1_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Allineare il testo in una tabella
- Crea un’istanza della classe Presentation.
- Ottieni il riferimento di una diapositiva attraverso il suo indice.
- Aggiungi un oggetto ITable alla diapositiva.
- Accedi a un oggetto ITextFrame dalla tabella.
- Accedi al [IParagraph] dell'ITextFrame.
- Allinea il testo verticalmente.
- Salva la presentazione modificata.
Questo codice Java mostra come allineare il testo in una tabella:
// Crea un'istanza della classe Presentation
Presentation pres = new Presentation();
try {
// Ottiene la prima diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Definisce colonne con larghezze e righe con altezze
double[] dblCols = { 120, 120, 120, 120 };
double[] dblRows = { 100, 100, 100, 100 };
// Aggiunge la forma di tabella alla diapositiva
ITable tbl = slide.getShapes().addTable(100, 50, dblCols, dblRows);
tbl.get_Item(1, 0).getTextFrame().setText("10");
tbl.get_Item(2, 0).getTextFrame().setText("20");
tbl.get_Item(3, 0).getTextFrame().setText("30");
// Accede al frame di testo
ITextFrame txtFrame = tbl.get_Item(0, 0).getTextFrame();
// Crea l'oggetto Paragraph per il frame di testo
IParagraph paragraph = txtFrame.getParagraphs().get_Item(0);
// Crea l'oggetto Portion per il paragrafo
IPortion portion = paragraph.getPortions().get_Item(0);
portion.setText("Text here");
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
// Allinea il testo verticalmente
ICell cell = tbl.get_Item(0, 0);
cell.setTextAnchorType(TextAnchorType.Center);
cell.setTextVerticalType(TextVerticalType.Vertical270);
// Salva la presentazione su disco
pres.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Impostare la formattazione del testo a livello di tabella
- Crea un’istanza della Presentation class.
- Ottieni il riferimento di una diapositiva attraverso il suo indice.
- Accedi a un oggetto ITable dalla diapositiva.
- Imposta setFontHeight(float value) per il testo.
- Imposta setAlignment(int value) e setMarginRight(float value).
- Imposta setTextVerticalType(byte value).
- Salva la presentazione modificata.
Questo codice Java mostra come applicare le opzioni di formattazione preferite al testo di una tabella:
// Crea un'istanza della classe Presentation
Presentation pres = new Presentation("simpletable.pptx");
try {
// Supponiamo che la prima forma sulla prima diapositiva sia una tabella
ITable someTable = (ITable) pres.getSlides().get_Item(0).getShapes().get_Item(0);
// Imposta l'altezza del carattere delle celle della tabella
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(25);
someTable.setTextFormat(portionFormat);
// Imposta l'allineamento del testo delle celle della tabella e il margine destro in un'unica chiamata
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.setAlignment(TextAlignment.Right);
paragraphFormat.setMarginRight(20);
someTable.setTextFormat(paragraphFormat);
// Imposta il tipo di testo verticale delle celle della tabella
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
someTable.setTextFormat(textFrameFormat);
pres.save("result.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Ottenere le proprietà di stile della tabella
Aspose.Slides consente di recuperare le proprietà di stile per una tabella in modo da poter utilizzare quei dettagli per un’altra tabella o altrove. Questo codice Java mostra come ottenere le proprietà di stile da uno stile predefinito di tabella:
Presentation pres = new Presentation();
try {
ITable table = pres.getSlides().get_Item(0).getShapes().addTable(10, 10, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
table.setStylePreset(TableStylePreset.DarkStyle1); // cambia il tema predefinito del preset di stile
pres.save("table.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Bloccare il rapporto d’aspetto di una tabella
Il rapporto d’aspetto di una forma geometrica è il rapporto tra le sue dimensioni in diverse dimensioni. Aspose.Slides fornisce la proprietà setAspectRatioLocked per consentire di bloccare l’impostazione del rapporto d’aspetto per tabelle e altre forme.
Questo codice Java mostra come bloccare il rapporto d’aspetto per una tabella:
Presentation pres = new Presentation("pres.pptx");
try {
ITable table = (ITable)pres.getSlides().get_Item(0).getShapes().get_Item(0);
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
table.getGraphicalObjectLock().setAspectRatioLocked(!table.getGraphicalObjectLock().getAspectRatioLocked()); // inverte
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
pres.save("pres-out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
Posso abilitare la direzione di lettura da destra a sinistra (RTL) per un’intera tabella e il testo nelle sue celle?
Sì. La tabella espone il metodo setRightToLeft, e i paragrafi hanno ParagraphFormat.setRightToLeft. L’uso di entrambi garantisce l’ordine RTL corretto e il rendering all’interno delle celle.
Come posso impedire agli utenti di spostare o ridimensionare una tabella nel file finale?
Utilizza shape locks per disabilitare lo spostamento, il ridimensionamento, la selezione, ecc. questi blocchi si applicano anche alle tabelle.
L’inserimento di un’immagine all’interno di una cella come sfondo è supportato?
Sì. Puoi impostare un picture fill per una cella; l’immagine coprirà l’area della cella secondo la modalità scelta (stretch o tile).