Διαχείριση Πίνακων Παρουσίασης σε Python
Εισαγωγή
Οι πίνακες στο PowerPoint οργανώνουν τις πληροφορίες σε σειρές και στήλες, καθιστώντας ευκολότερη την ανάγνωση και τη σύγκριση των τιμών.
Το Aspose.Slides παρέχει τις κλάσεις Πίνακας και Κυψέλη καθώς και άλλους τύπους, ώστε να μπορείτε να δημιουργείτε, να ενημερώνετε και να διαχειρίζεστε πίνακες σε παρουσιάσεις.
Δημιουργία Πίνακα από το Μηδέν
Δημιουργήστε έναν πίνακα καθορίζοντας τη θέση του, τα πλάτη των στηλών και τα ύψη των σειρών. Αφού τον προσθέσετε σε μια διαφάνεια, μπορείτε να μορφοποιήσετε τα σύνορα των κυψέλων, να συγχωνεύσετε κυψέλες και να εισάγετε κείμενο.
- Δημιουργήστε μια παρουσίαση χρησιμοποιώντας την κλάση Presentation.
- Αποκτήστε μια αναφορά στη διαφάνεια με το δείκτη της.
- Ορίστε μια λίστα με τα πλάτη των στηλών σε σημεία.
- Ορίστε μια λίστα με τα ύψη των σειρών σε σημεία.
- Προσθέστε ένα αντικείμενο Πίνακας στη διαφάνεια μέσω της μεθόδου addTable.
- Διατρέξτε κάθε Κυψέλη για να εφαρμόσετε μορφοποίηση στα άνω, κάτω, δεξιά και αριστερά σύνορα.
- Συγχωνεύστε τις δύο πρώτες κυψέλες της πρώτης σειράς του πίνακα.
- Πρόσβαση στην ενωμένη κυψέλη μέσω της μεθόδου getTextFrame.
- Ορίστε το κείμενο στην ενωμένη κυψέλη.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Το παρακάτω παράδειγμα δημιουργεί έναν πίνακα με τρεις στήλες και πέντε σειρές στη θέση (100, 50) σημεία. Εφαρμόζει κόκκινα σύνορα πλάτους 5 σημείων, συγχωνεύει τις δύο πρώτες κυψέλες της πρώτης σειράς και αποθηκεύει το αποτέλεσμα ως table.pptx.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
column_widths = [50, 50, 50]
row_heights = [50, 30, 30, 30, 30]
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
for row in table.getRows():
for cell in row:
cell_format = cell.getCellFormat()
cell_format.getBorderTop().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderTop().setWidth(5)
cell_format.getBorderBottom().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderBottom().setWidth(5)
cell_format.getBorderLeft().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderLeft().setWidth(5)
cell_format.getBorderRight().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderRight().setWidth(5)
table.mergeCells(table.get_Item(0, 0), table.get_Item(1, 0), False)
table.get_Item(0, 0).getTextFrame().setText("Merged Cells")
presentation.save("table.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Αρίθμηση σε Τυπικό Πίνακα
Σε έναν τυπικό πίνακα, οι δείκτες των κυψέλων είναι μηδενικά και ακολουθούν τη σειρά (στήλη, σειρά). Η πρώτη κυψέλη έχει δείκτη (0, 0).
Για παράδειγμα, οι κυψέλες σε έναν πίνακα με 4 στήλες και 4 σειρές αριθμούνται ως εξής:
| (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) |
Το παράδειγμα αυτό δημιουργεί τον 4 × 4 πίνακα που απεικονίζεται παραπάνω, με πλάτη στηλών και ύψη σειρών 70 σημείων και κόκκινα σύνορα κυψέλων πλάτους 5 σημείων. Οι συντεταγμένες απεικονίζουν τους δείκτες των κυψέλων· το παράδειγμα αφήνει τις κυψέλες κενές και αποθηκεύει τον πίνακα ως StandardTables_out.pptx.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
for row in table.getRows():
for cell in row:
cell_format = cell.getCellFormat()
cell_format.getBorderTop().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderTop().setWidth(5)
cell_format.getBorderBottom().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderBottom().setWidth(5)
cell_format.getBorderLeft().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderLeft().setWidth(5)
cell_format.getBorderRight().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderRight().setWidth(5)
presentation.save("StandardTables_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Πρόσβαση σε Υπάρχον Πίνακα
Οι πίνακες αποθηκεύονται στη συλλογή σχημάτων μιας διαφάνειας. Διατρέξτε τα σχήματα για να εντοπίσετε έναν πίνακα, έπειτα χρησιμοποιήστε την κλάση Πίνακας για να διαβάσετε ή να ενημερώσετε τις κυψέλες του.
- Φορτώστε την παρουσίαση χρησιμοποιώντας την κλάση Presentation.
- Αποκτήστε μια αναφορά στη διαφάνεια που περιέχει τον πίνακα με το δείκτη της.
- Διατρέξτε τα αντικείμενα Shape και σταματήστε όταν βρεθεί ένας πίνακας. Εάν η διαφάνεια περιέχει πολλούς πίνακες, χρησιμοποιήστε το getAlternativeText για να τα προσδιορίσετε.
- Ενημερώστε το κείμενο στην επιλεγμένη κυψέλη.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Το παρακάτω παράδειγμα ανοίγει το UpdateExistingTable.pptx και βρίσκει τον πρώτο πίνακα στην πρώτη διαφάνεια. Θέτει την κυψέλη στη στήλη 0, σειρά 1 σε New και αποθηκεύει το αποτέλεσμα ως table1_out.pptx. Η είσοδος πρέπει να περιέχει τουλάχιστον μία διαφάνεια και ο πρώτος πίνακας σε αυτή πρέπει να έχει τουλάχιστον μία στήλη και δύο σειρές.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, Table
presentation = Presentation("UpdateExistingTable.pptx")
try:
slide = presentation.getSlides().get_Item(0)
table = None
for shape in slide.getShapes():
if isinstance(shape, Table):
table = shape
break
if table is not None:
table.get_Item(0, 1).getTextFrame().setText("New")
presentation.save("table1_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Για να αλλάξετε το μέγεθος μιας σειράς σε υπάρχοντα πίνακα και να καταλάβετε γιατί το πραγματικό του ύψος μπορεί να υπερβαίνει το ελάχιστο που ζητήθηκε, δείτε το Έλεγχος Ύψους Γραμμής.
Βρείτε την Κυψέλη που Κατέχει Πλαίσιο Κειμένου
Όταν γενικός κώδικας επεξεργασίας κειμένου λαμβάνει ένα TextFrame από έναν πίνακα, χρησιμοποιήστε τη μέθοδο TextFrame.getParentCell για να ανακτήσετε την ιδιοκτητική Κυψέλη. Για πλαίσιο κειμένου κυψέλης πίνακα, το TextFrame.getParentCell επιστρέφει τον ιδιοκτήτη και το TextFrame.getParentShape επιστρέφει None, παρόλο που ο ίδιος ο πίνακας είναι σχήμα.
Οι συντεταγμένες της κυψέλης είναι διαθέσιμες μέσω των μόνο-για-ανάγνωση μεθόδων Cell.getFirstColumnIndex και Cell.getFirstRowIndex. Το TextFrame.getParentCell παρέχει επίσης μόνο-για-ανάγνωση πλοήγηση: επιστρέφει τον ιδιοκτήτη χωρίς να αλλάζει την ιδιοκτησία. Πάντα ελέγχετε την επιστρεφόμενη κυψέλη για None πριν τη χρησιμοποιήσετε.
Για ένα πλήρες παράδειγμα που αναγνωρίζει ιδιοκτήτες κυψέλης‑πίνακα και σχήματος, συμπεριλαμβανομένων σχημάτων που συνδέονται με κόμβους SmartArt, δείτε το Αναζήτηση και Αντικατάσταση Κειμένου.
Στοίχιση Κειμένου σε Πίνακα
Μπορείτε να ελέγξετε την κάθετη αγκύρωση και την κατεύθυνση κειμένου των μεμονωμένων κυψέλων πίνακα. Το παράδειγμα σε αυτήν την ενότητα κεντράρει το κείμενο στην πρώτη κυψέλη και το περιστρέφει κατά 270 μοίρες.
- Δημιουργήστε ένα αντίγραφο της κλάσης Presentation.
- Αποκτήστε μια αναφορά στη διαφάνεια με το δείκτη της.
- Προσθέστε ένα αντικείμενο Πίνακας στη διαφάνεια.
- Πρόσβαση σε ένα αντικείμενο TextFrame από τον πίνακα.
- Πρόσβαση στην πρώτη Paragraph και ορίστε το κείμενο και το χρώμα της.
- Ορίστε την κάθετη αγκύρωση της κυψέλης και την κατεύθυνση κειμένου χρησιμοποιώντας τις μεθόδους setTextAnchorType και setTextVerticalType.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Το παράδειγμα αυτό δημιουργεί έναν 4 × 4 πίνακα με πλάτη στηλών 120 σημείων και ύψη σειρών 100 σημείων. Μορφοποιεί το κείμενο στην κυψέλη (0, 0), προσθέτει τιμές στις υπόλοιπες κυψέλες της πρώτης σειράς και αποθηκεύει το αποτέλεσμα ως Vertical_Align_Text_out.pptx.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat, TextAnchorType, TextVerticalType
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
column_widths = [120, 120, 120, 120]
row_heights = [100, 100, 100, 100]
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
table.get_Item(1, 0).getTextFrame().setText("10")
table.get_Item(2, 0).getTextFrame().setText("20")
table.get_Item(3, 0).getTextFrame().setText("30")
text_frame = table.get_Item(0, 0).getTextFrame()
paragraph = text_frame.getParagraphs().get_Item(0)
portion = paragraph.getPortions().get_Item(0)
portion.setText("Text here")
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
cell = table.get_Item(0, 0)
cell.setTextAnchorType(TextAnchorType.Center)
cell.setTextVerticalType(TextVerticalType.Vertical270)
presentation.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Ορισμός Μορφοποίησης Κειμένου σε Επίπεδο Πίνακα
Χρησιμοποιήστε το setTextFormat για να εφαρμόσετε μορφοποίηση κειμένου σε όλες τις κυψέλες ενός πίνακα. Οι υπερφορτώσεις του δέχονται μορφοποίηση τμήματος, παραγράφου και πλαισίου κειμένου, ώστε να μπορείτε να ορίσετε αυτές τις ιδιότητες χωρίς να διατρέξετε μεμονωμένες κυψέλες.
- Φορτώστε την παρουσίαση χρησιμοποιώντας την κλάση Presentation.
- Αποκτήστε μια αναφορά στη διαφάνεια με το δείκτη της.
- Πρόσβαση σε ένα αντικείμενο Πίνακας από τη διαφάνεια.
- Ορίστε το μέγεθος γραμματοσειράς με τη μέθοδο setFontHeight για το κείμενο.
- Ορίστε την στοίχιση παραγράφου και το δεξιό περιθώριο με τις μεθόδους setAlignment και setMarginRight.
- Ορίστε την κατακόρυφη κατεύθυνση κειμένου με τη μέθοδο setTextVerticalType.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Το παρακάτω παράδειγμα ανοίγει το table.pptx, το οποίο πρέπει να περιέχει τουλάχιστον μία διαφάνεια με πίνακα ως πρώτο σχήμα. Ορίζει το μέγεθος γραμματοσειράς σε 25 σημεία, ευθυγραμμίζει τις παραγράφους δεξιά με δεξί περιθώριο 20 σημείων και κάνει το κείμενο κατακόρυφο. Η μορφοποιημένη παρουσίαση αποθηκεύεται ως result.pptx.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ParagraphFormat, PortionFormat, Presentation, SaveFormat, TextAlignment, TextFrameFormat, TextVerticalType, Table
presentation = Presentation("table.pptx")
try:
slide = presentation.getSlides().get_Item(0)
table = slide.getShapes().get_Item(0)
portion_format = PortionFormat()
portion_format.setFontHeight(25)
table.setTextFormat(portion_format)
paragraph_format = ParagraphFormat()
paragraph_format.setAlignment(TextAlignment.Right)
paragraph_format.setMarginRight(20)
table.setTextFormat(paragraph_format)
text_frame_format = TextFrameFormat()
text_frame_format.setTextVerticalType(TextVerticalType.Vertical)
table.setTextFormat(text_frame_format)
presentation.save("result.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Λήψη Ιδιοτήτων Στυλ Πίνακα
Χρησιμοποιήστε το getStylePreset για να διαβάσετε το προεπιλεγμένο στυλ ενός πίνακα και το setStylePreset για να το ορίσετε. Το παράδειγμα αυτό εφαρμόζει το TableStylePreset.DarkStyle1 σε έναν πίνακα, εκτυπώνει την τιμή του προεπιλεγμένου στυλ και ορίζει το ίδιο προεπιλεγμένο στυλ σε δεύτερο πίνακα. Και οι δύο πίνακες αποθηκεύονται στο table-style.pptx.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TableStylePreset
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
column_widths = [100, 150]
row_heights = [5, 5, 5]
table = slide.getShapes().addTable(10, 10, column_widths, row_heights)
table.setStylePreset(TableStylePreset.DarkStyle1)
style_preset = table.getStylePreset()
print("Table style preset: ", style_preset)
another_table = slide.getShapes().addTable(10, 100, column_widths, row_heights)
another_table.setStylePreset(style_preset)
presentation.save("table-style.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Κλείδωμα Αναλογιών Πίνακα
Ο λόγος διαστάσεων ενός πίνακα είναι το πηλίκο του πλάτους προς το ύψος του. Χρησιμοποιήστε τη μέθοδο setAspectRatioLocked για να κλειδώσετε αυτό το λόγο σε έναν πίνακα.
Το παρακάτω παράδειγμα ανοίγει το pres.pptx, το οποίο πρέπει να περιέχει τουλάχιστον μία διαφάνεια με πίνακα ως πρώτο σχήμα. Εκτυπώνει την τρέχουσα κατάσταση κλειδώματος, ενεργοποιεί το κλείδωμα του λόγου διαστάσεων, εκτυπώνει την ενημερωμένη κατάσταση (True) και αποθηκεύει το αποτέλεσμα ως pres-out.pptx.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, Table
presentation = Presentation("pres.pptx")
try:
slide = presentation.getSlides().get_Item(0)
table = slide.getShapes().get_Item(0)
print("Lock aspect ratio set: ", table.getGraphicalObjectLock().getAspectRatioLocked())
table.getGraphicalObjectLock().setAspectRatioLocked(True)
print("Lock aspect ratio set: ", table.getGraphicalObjectLock().getAspectRatioLocked())
presentation.save("pres-out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Συχνές Ερωτήσεις
Μπορώ να ενεργοποιήσω την ανάγνωση από δεξιά προς τα αριστερά (RTL) για ολόκληρο τον πίνακα και το κείμενο στις κυψέλες του;
Ναι. Ο πίνακας διαθέτει τη μέθοδο setRightToLeft και οι παράγραφοι έχουν τη μέθοδο ParagraphFormat.setRightToLeft. Η χρήση και των δύο εξασφαλίζει τη σωστή σειρά RTL και την απόδοση μέσα στις κυψέλες.
Πώς μπορώ να αποτρέψω τους χρήστες από το να μετακινούν ή να αλλάζουν μέγεθος ενός πίνακα στο τελικό αρχείο;
Χρησιμοποιήστε τα shape locks για να απενεργοποιήσετε τη μετακίνηση, το μέγεθος, την επιλογή κ.λπ. Αυτά τα κλειδώματα εφαρμόζονται και στους πίνακες.
Υποστηρίζεται η εισαγωγή εικόνας μέσα σε μια κυψέλη ως φόντο;
Ναι. Μπορείτε να ορίσετε μια picture fill για μια κυψέλη· η εικόνα θα καλύπτει την περιοχή της κυψέλης ανάλογα με τη ζητούμενη λειτουργία (τέντωμα ή επικάλυψη).