Gestire le celle di tabella nelle presentazioni con Python
Panoramica
Aspose.Slides ti consente di accedere e modificare le celle delle tabelle nelle presentazioni PowerPoint. Questo articolo spiega come identificare le celle unite, rimuovere i bordi delle celle, gestire la numerazione delle celle dopo l’unione o la divisione, cambiare il colore di sfondo di una cella e aggiungere un’immagine all’interno di una cella di tabella. Gli esempi mostrano come creare o aprire una presentazione, ottenere una tabella da una diapositiva, aggiornare la formattazione delle celle tramite le proprietà della cella e salvare la presentazione modificata come file PPTX.
Identificare celle di tabella unite
Le tabelle contengono spesso celle unite per intestazioni o per raggruppare dati correlati. In questa sezione vedrai come determinare se una cella specifica appartiene a un’area unita e come fare riferimento alla cella master (in alto a sinistra) per leggere o formattare l’intero blocco in modo coerente.
- Crea un’istanza della classe Presentation.
- Ottieni la tabella dalla prima diapositiva.
- Scorri le righe e le colonne della tabella per trovare le celle unite.
- Stampa un messaggio quando vengono trovate celle unite.
Il seguente codice Python identifica le celle di tabella unite in una presentazione:
import aspose.slides as slides
with slides.Presentation("presentation_with_table.pptx") as presentation:
# Supponendo che la prima forma nella prima diapositiva sia una tabella.
table = presentation.slides[0].shapes[0]
for row_index in range(len(table.rows)):
for column_index in range(len(table.columns)):
cell = table.rows[row_index][column_index]
if cell.is_merged_cell:
print("Cell ({}, {}) is part of a merged region with a row span of {} and a column span of {}, starting from cell ({}, {}).".format(
row_index, column_index, cell.row_span, cell.col_span, cell.first_row_index, cell.first_column_index))
Rimuovere i bordi delle celle di tabella
A volte i bordi della tabella distraggono dal contenuto o creano confusione visiva. Questa sezione mostra come rimuovere i bordi dalle celle selezionate — o da lati specifici di una cella — per ottenere un layout più pulito e allineato al design della diapositiva.
- Crea un’istanza della classe Presentation.
- Ottieni la diapositiva per indice.
- Definisci un array di larghezze delle colonne.
- Definisci un array di altezze delle righe.
- Aggiungi una tabella alla diapositiva usando il metodo add_table.
- Scorri ogni cella per cancellare i bordi superiore, inferiore, sinistro e destro.
- Salva la presentazione modificata come file PPTX.
Il seguente codice Python mostra come rimuovere i bordi dalle celle di tabella:
import aspose.slides as slides
# Istanziare la classe Presentation che rappresenta un file PPTX.
with slides.Presentation() as presentation:
# Accedere alla prima diapositiva.
slide = presentation.slides[0]
# Definire le colonne con larghezze e le righe con altezze.
column_widths = [50, 50, 50, 50]
row_heights = [50, 30, 30, 30, 30]
# Aggiungere una forma tabella alla diapositiva.
table = slide.shapes.add_table(50, 50, column_widths, row_heights)
# Cancellare il riempimento del bordo per ogni cella.
for row in table.rows:
for cell in row:
cell.cell_format.border_top.fill_format.fill_type = slides.FillType.NO_FILL
cell.cell_format.border_bottom.fill_format.fill_type = slides.FillType.NO_FILL
cell.cell_format.border_left.fill_format.fill_type = slides.FillType.NO_FILL
cell.cell_format.border_right.fill_format.fill_type = slides.FillType.NO_FILL
# Salvare il file PPTX su disco.
presentation.save("table.pptx", slides.export.SaveFormat.PPTX)
Numerazione nelle celle unite
Se unisci due coppie di celle — ad esempio, (1, 1) × (2, 1) e (1, 2) × (2, 2) — la tabella risultante mantiene la stessa numerazione delle celle di una tabella senza unioni. Il seguente codice Python dimostra questo comportamento:
import aspose.slides as slides
# Istanziare la classe Presentation che rappresenta un file PPTX.
with slides.Presentation() as presentation:
# Accedere alla prima diapositiva.
slide = presentation.slides[0]
# Definire colonne con larghezze e righe con altezze.
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
# Aggiungere una forma tabella alla diapositiva.
table = slide.shapes.add_table(50, 50, column_widths, row_heights)
# Unire le celle (1,1) e (2,1).
table.merge_cells(table.rows[1][1], table.rows[2][1], False)
# Unire le celle (1, 2) e (2, 2).
table.merge_cells(table.rows[1][2], table.rows[2][2], False)
# Stampare gli indici delle celle.
for row_index in range(len(table.rows)):
for column_index in range(len(table.rows[row_index])):
cell = table.rows[row_index][column_index]
print(f"{cell.first_row_index, cell.first_column_index} ", end="")
print()
# Salvare il file PPTX su disco.
presentation.save("merged_cells.pptx", slides.export.SaveFormat.PPTX)
Output:
(0, 0) (0, 1) (0, 2) (0, 3)
(1, 0) (1, 1) (1, 2) (1, 3)
(2, 0) (1, 1) (1, 2) (2, 3)
(3, 0) (3, 1) (3, 2) (3, 3)
Numerazione nelle celle divise
Nell’esempio precedente, quando le celle della tabella erano unite, la numerazione nelle altre celle non cambiava. Questa volta creiamo una tabella regolare (senza celle unite) e poi dividiamo la cella (1, 1) per ottenere una tabella speciale. Presta attenzione alla numerazione di questa tabella — può sembrare insolita. Tuttavia, è così che Microsoft PowerPoint numera le celle delle tabelle e Aspose.Slides segue lo stesso comportamento.
Il seguente codice Python dimostra questo comportamento:
import aspose.slides as slides
# Istanziare la classe Presentation che rappresenta un file PPTX.
with slides.Presentation() as presentation:
# Accedere alla prima diapositiva.
slide = presentation.slides[0]
# Definire le larghezze delle colonne e le altezze delle righe.
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
# Aggiungere una forma tabella alla diapositiva.
table = slide.shapes.add_table(50, 50, column_widths, row_heights)
# Dividere la cella (1, 1).
table.rows[1][1].split_by_width(table.rows[2][1].width / 2)
# Stampare gli indici delle celle.
for row_index in range(len(table.rows)):
for column_index in range(len(table.rows[row_index])):
cell = table.rows[row_index][column_index]
print(f"{cell.first_row_index, cell.first_column_index} ", end="")
print()
# Salvare il file PPTX su disco.
presentation.save("split_cells.pptx", slides.export.SaveFormat.PPTX)
Output:
(0, 0) (0, 1) (0, 1) (0, 3) (0, 4)
(1, 0) (1, 1) (1, 2) (1, 3) (1, 4)
(2, 0) (2, 1) (2, 1) (2, 3) (2, 4)
(3, 0) (3, 1) (3, 1) (3, 3) (3, 4)
Modificare il colore di sfondo di una cella di tabella
Il seguente esempio Python dimostra come cambiare il colore di sfondo di una cella di tabella:
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [150, 150, 150, 150]
row_heights = [50, 50, 50, 50, 50]
# Crea una nuova tabella.
table = slide.shapes.add_table(50, 50, column_widths, row_heights)
# Imposta il colore di sfondo per una cella.
cell = table.rows[2][3]
cell.cell_format.fill_format.fill_type = slides.FillType.SOLID
cell.cell_format.fill_format.solid_fill_color.color = draw.Color.red
presentation.save("cell_background_color.pptx", slides.export.SaveFormat.PPTX)
Inserire immagini nelle celle di tabella
Questa sezione mostra come inserire un’immagine in una cella di tabella con Aspose.Slides. Copre l’applicazione di un riempimento immagine alla cella target e la configurazione delle opzioni di visualizzazione come stretch o tile.
- Crea un’istanza della classe Presentation.
- Ottieni un riferimento alla diapositiva per indice.
- Definisci un array di larghezze delle colonne.
- Definisci un array di altezze delle righe.
- Aggiungi una tabella alla diapositiva con il metodo add_table.
- Carica l’immagine da un file.
- Aggiungi l’immagine alle immagini della presentazione per ottenere un PPImage.
- Imposta il FillType della cella di tabella su
PICTURE. - Applica l’immagine alla cella di tabella e scegli una modalità di riempimento (ad esempio
STRETCH). - Salva la presentazione come file PPTX.
Il seguente codice Python mostra come posizionare un’immagine all’interno di una cella di tabella durante la creazione della tabella:
import aspose.slides as slides
# Istanziare un oggetto Presentation.
with slides.Presentation() as presentation:
# Accedere alla prima diapositiva.
slide = presentation.slides[0]
# Definire le larghezze delle colonne e le altezze delle righe.
column_widths = [150, 150, 150, 150]
row_heights = [100, 100, 100, 100]
# Aggiungere una forma tabella alla diapositiva.
table = slide.shapes.add_table(50, 50, column_widths, row_heights)
# Caricare l'immagine e aggiungerla alla presentazione per ottenere un PPImage.
with slides.Images.from_file("image.png") as source_image:
image = presentation.images.add_image(source_image)
# Applicare l'immagine alla prima cella della tabella.
cell = table.rows[0][0]
cell.cell_format.fill_format.fill_type = slides.FillType.PICTURE
cell.cell_format.fill_format.picture_fill_format.picture_fill_mode = slides.PictureFillMode.STRETCH
cell.cell_format.fill_format.picture_fill_format.picture.image = image
# Salvare la presentazione su disco.
presentation.save("image_in_table_cell.pptx", slides.export.SaveFormat.PPTX)
FAQ
Posso impostare spessori e stili di linea diversi per i lati di una singola cella?
Sì. I bordi top/bottom/left/right hanno proprietà separate, quindi lo spessore e lo stile di ciascun lato possono differire. Questo deriva logicamente dal controllo dei bordi per lato di una cella mostrato nell’articolo.
Cosa succede all’immagine se modifico la dimensione della colonna/riga dopo aver impostato un’immagine come sfondo della cella?
Il comportamento dipende dalla fill mode (stretch/tile). Con lo stretching, l’immagine si adatta alla nuova cella; con il tiling, le tessere vengono ricalcolate. L’articolo descrive le modalità di visualizzazione dell’immagine in una cella.
Posso assegnare un collegamento ipertestuale a tutto il contenuto di una cella?
I Link ipertestuali sono impostati a livello di porzione di testo all’interno del frame di testo della cella o a livello dell’intera tabella/forma. In pratica, assegni il collegamento a una porzione o a tutto il testo nella cella.
Posso impostare caratteri diversi all’interno di una singola cella?
Sì. Il frame di testo di una cella supporta le portions (segmenti) con formattazione indipendente — famiglia del carattere, stile, dimensione e colore.