Διαχείριση Πινάκων Παρουσίασης στο Android
Εισαγωγή
Οι πίνακες στο PowerPoint οργανώνουν τις πληροφορίες σε σειρές και στήλες, κάνοντάς τα πιο εύκολα στην ανάγνωση και τη σύγκριση τιμών.
Το Aspose.Slides παρέχει την κλάση Table , τη διεπαφή ITable , την κλάση Cell , τη διεπαφή ICell και άλλους τύπους ώστε να μπορείτε να δημιουργείτε, ενημερώνετε και διαχειρίζεστε πίνακες σε παρουσιάσεις.
Δημιουργία Πίνακα από το Μηδέν
Δημιουργήστε έναν πίνακα ορίζοντας τη θέση, τα πλάτη των στηλών και τα ύψη των σειρών. Αφού τον προσθέσετε σε μια διαφάνεια, μπορείτε να μορφοποιήσετε τα σύνορα των κελιών, να συγχωνεύσετε κελιά και να εισάγετε κείμενο.
- Δημιουργήστε ένα στιγμιότυπο της κλάσης Presentation.
- Αποκτήστε μια αναφορά στη διαφάνεια με βάση τον δείκτη της.
- Ορίστε έναν πίνακα με τα πλάτη των στηλών σε μονάδες point.
- Ορίστε έναν πίνακα με τα ύψη των σειρών σε μονάδες point.
- Προσθέστε ένα αντικείμενο ITable στη διαφάνεια μέσω της μεθόδου addTable.
- Επανάληψη σε κάθε ICell για την εφαρμογή μορφοποίησης στα άνω, κάτω, δεξιά και αριστερά σύνορα.
- Συγχωνεύστε τα δύο πρώτα κελιά της πρώτης σειράς του πίνακα.
- Προσπελάστε το συγχωνευμένο κελί μέσω της μεθόδου getTextFrame.
- Ορίστε το κείμενο στο συγχωνευμένο κελί.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Το παρακάτω παράδειγμα δημιουργεί έναν πίνακα με τρεις στήλες και πέντε σειρές στο (100, 50) points. Εφαρμόζει κόκκινα σύνορα με πάχος 5 points, συγχωνεύει τα δύο πρώτα κελιά στην πρώτη σειρά και αποθηκεύει το αποτέλεσμα ως table.pptx.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 50, 50, 50 };
double[] rowHeights = { 50, 30, 30, 30, 30 };
ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
for (IRow row : table.getRows())
{
for (ICell cell : row)
{
ICellFormat cellFormat = 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);
}
}
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 points και κόκκινα σύνορα κελιών με πάχος 5 points. Οι συντεταγμένες δείχνουν δείκτες κελιών· το παράδειγμα αφήνει τα κελιά κενά και αποθηκεύει τον πίνακα ως StandardTables_out.pptx.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 70, 70, 70, 70 };
double[] rowHeights = { 70, 70, 70, 70 };
ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
for (IRow row : table.getRows())
{
for (ICell cell : row)
{
ICellFormat cellFormat = 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);
}
}
presentation.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Πρόσβαση σε Υπάρχον Πίνακα
Οι πίνακες αποθηκεύονται στη συλλογή σχήματος μιας διαφάνειας. Επανάληψη στα σχήματα για να εντοπιστεί ένας πίνακας, στη συνέχεια χρήση της διεπαφής ITable για ανάγνωση ή ενημέρωση των κελιών του.
- Φορτώστε την παρουσίαση χρησιμοποιώντας την κλάση Presentation.
- Αποκτήστε μια αναφορά στη διαφάνεια που περιέχει τον πίνακα με βάση τον δείκτη της.
- Επανάληψη στα αντικείμενα IShape και διακοπή όταν βρεθεί ένας πίνακας. Εάν η διαφάνεια περιέχει πολλούς πίνακες, χρησιμοποιήστε το getAlternativeText για να εντοπίσετε αυτόν που χρειάζεστε.
- Ενημερώστε το κείμενο στο επιθυμητό κελί.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Το παρακάτω παράδειγμα ανοίγει το UpdateExistingTable.pptx και βρίσκει τον πρώτο πίνακα στην πρώτη διαφάνεια. Ορίζει το κελί στη στήλη 0, σειρά 1 σε New και αποθηκεύει το αποτέλεσμα ως table1_out.pptx. Η είσοδος πρέπει να περιέχει τουλάχιστον μία διαφάνεια, και ο πρώτος πίνακας σε αυτήν τη διαφάνεια πρέπει να έχει τουλάχιστον μία στήλη και δύο σειρές.
import com.aspose.slides.*;
Presentation presentation = new Presentation("UpdateExistingTable.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = null;
for (IShape shape : slide.getShapes()) {
if (shape instanceof ITable) {
table = (ITable) shape;
break;
}
}
if (table != null) {
table.get_Item(0, 1).getTextFrame().setText("New");
presentation.save("table1_out.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Για να αλλάξετε το μέγεθος μιας σειράς σε υπάρχον πίνακα και να καταλάβετε γιατί το πραγματικό του ύψος μπορεί να υπερβαίνει το ελάχιστο που ζητήθηκε, δείτε Control Row Height.
Εντοπισμός του Κελιού που Κατέχει ένα Πλαίσιο Κειμένου
Όταν ο γενικός κώδικας επεξεργασίας κειμένου λαμβάνει ένα ITextFrame από πίνακα, χρησιμοποιήστε τη μέθοδο ITextFrame.getParentCell για να ανακτήσετε το κατέχον ICell. Για ένα πλαίσιο κειμένου κελιού πίνακα, το ITextFrame.getParentCell επιστρέφει τον κάτοχο και το ITextFrame.getParentShape επιστρέφει null, παρόλο που ο ίδιος ο πίνακας είναι σχήμα.
Οι συντεταγμένες του κελιού είναι διαθέσιμες μέσω των μόνο για ανάγνωση μεθόδων ICell.getFirstColumnIndex και ICell.getFirstRowIndex. Το ITextFrame.getParentCell παρέχει επίσης πλοήγηση μόνο για ανάγνωση: επιστρέφει τον κάτοχο αλλά δεν αλλάζει την ιδιοκτησία. Πάντα ελέγχετε το επιστρεφόμενο κελί για null πριν το χρησιμοποιήσετε.
Για ένα πλήρες παράδειγμα που εντοπίζει ιδιοκτήτες κελιών πίνακα και σχήματος, συμπεριλαμβανομένων των σχημάτων που συνδέονται με κόμβους SmartArt, δείτε Search and Replace Text.
Στοίχιση Κειμένου σε Πίνακα
Μπορείτε να ελέγξετε την κατακόρυφη αγκύρωση και την κατεύθυνση κειμένου των μεμονωμένων κελιών πίνακα. Το παράδειγμα σε αυτήν την ενότητα κεντράρει το κείμενο στο πρώτο κελί και το περιστρέφει κατά 270 μοίρες.
- Δημιουργήστε ένα στιγμιότυπο της κλάσης Presentation.
- Αποκτήστε μια αναφορά στη διαφάνεια με βάση τον δείκτη της.
- Προσθέστε ένα αντικείμενο ITable στη διαφάνεια.
- Πρόσβαση σε αντικείμενο ITextFrame από τον πίνακα.
- Πρόσβαση στην πρώτη IParagraph και ορίστε το κείμενο και το χρώμα της.
- Ορίστε την κατακόρυφη αγχύρωση του κελιού και την κατεύθυνση κειμένου χρησιμοποιώντας τις setTextAnchorType και setTextVerticalType.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Αυτό το παράδειγμα δημιουργεί έναν 4 × 4 πίνακα με πλάτη στηλών 120 points και ύψη σειρών 100 points. Μορφοποιεί το κείμενο στο κελί (0, 0), προσθέτει τιμές στα υπόλοιπα κελιά της πρώτης σειράς και αποθηκεύει το αποτέλεσμα ως Vertical_Align_Text_out.pptx.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 120, 120, 120, 120 };
double[] rowHeights = { 100, 100, 100, 100 };
ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
table.get_Item(1, 0).getTextFrame().setText("10");
table.get_Item(2, 0).getTextFrame().setText("20");
table.get_Item(3, 0).getTextFrame().setText("30");
ITextFrame textFrame = table.get_Item(0, 0).getTextFrame();
IParagraph paragraph = textFrame.getParagraphs().get_Item(0);
IPortion portion = paragraph.getPortions().get_Item(0);
portion.setText("Text here");
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
ICell 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.
- Αποκτήστε μια αναφορά στη διαφάνεια με βάση τον δείκτη της.
- Πρόσβαση σε αντικείμενο ITable από τη διαφάνεια.
- Ορίστε το μέγεθος γραμματοσειράς χρησιμοποιώντας το setFontHeight για το κείμενο.
- Ορίστε την στοίχιση παραγράφου και το δεξιό περιθώριο χρησιμοποιώντας τα setAlignment και setMarginRight.
- Ορίστε την κατεύθυνση κειμένου χρησιμοποιώντας το setTextVerticalType.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
Το παρακάτω παράδειγμα ανοίγει το table.pptx, το οποίο πρέπει να περιέχει τουλάχιστον μία διαφάνεια με έναν πίνακα ως πρώτο σχήμα. Ορίζει το μέγεθος γραμματοσειράς σε 25 points, στοίχηση παραγράφων δεξιά με δεξιό περιθώριο 20 points και κάνει το κείμενο κάθετο. Η μορφοποιημένη παρουσίαση αποθηκεύεται ως result.pptx.
import com.aspose.slides.*;
Presentation presentation = new Presentation("table.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable) slide.getShapes().get_Item(0);
PortionFormat portionFormat = new PortionFormat();
portionFormat.setFontHeight(25);
table.setTextFormat(portionFormat);
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.setAlignment(TextAlignment.Right);
paragraphFormat.setMarginRight(20);
table.setTextFormat(paragraphFormat);
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
table.setTextFormat(textFrameFormat);
presentation.save("result.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Λήψη Ιδιοτήτων Στυλ Πίνακα
Χρησιμοποιήστε το getStylePreset για να διαβάσετε το προεπιλεγμένο στυλ ενός πίνακα και το setStylePreset για να το ορίσετε. Αυτό το παράδειγμα εφαρμόζει το TableStylePreset.DarkStyle1 σε έναν πίνακα, εκτυπώνει την τιμή του προεπιλεγμένου στυλ και ορίζει το ίδιο προεπιλεγμένο στυλ σε δεύτερο πίνακα. Και οι δύο πίνακες αποθηκεύονται στο table-style.pptx.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] columnWidths = { 100, 150 };
double[] rowHeights = { 5, 5, 5 };
ITable table = slide.getShapes().addTable(10, 10, columnWidths, rowHeights);
table.setStylePreset(TableStylePreset.DarkStyle1);
int stylePreset = table.getStylePreset();
System.out.println("Table style preset: " + stylePreset);
ITable anotherTable = slide.getShapes().addTable(10, 100, columnWidths, rowHeights);
anotherTable.setStylePreset(stylePreset);
presentation.save("table-style.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Κλείδωμα Λόγου Αναλογίας Πίνακα
Ο λόγος αναλογίας ενός πίνακα είναι το πηλίκο του πλάτους προς το ύψος του. Χρησιμοποιήστε τη μέθοδο setAspectRatioLocked για να κλειδώσετε αυτόν τον λόγο για έναν πίνακα.
Το παρακάτω παράδειγμα ανοίγει το pres.pptx, το οποίο πρέπει να περιέχει τουλάχιστον μία διαφάνεια με έναν πίνακα ως πρώτο σχήμα. Εκτυπώνει την τρέχουσα κατάσταση κλειδώματος, ενεργοποιεί το κλείδωμα του λόγου αναλογίας, εκτυπώνει την ενημερωμένη κατάσταση (true) και αποθηκεύει το αποτέλεσμα ως pres-out.pptx.
import com.aspose.slides.*;
Presentation presentation = new Presentation("pres.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable) slide.getShapes().get_Item(0);
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
table.getGraphicalObjectLock().setAspectRatioLocked(true);
System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
presentation.save("pres-out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
FAQ
Μπορώ να ενεργοποιήσω την ανάγνωση από δεξιά προς αριστερά (RTL) για ολόκληρο τον πίνακα και το κείμενο στα κελιά του;
Ναι. Ο πίνακας διαθέτει τη μέθοδο setRightToLeft, και οι παράγραφοι έχουν τη μέθοδο ParagraphFormat.setRightToLeft. Η χρήση και των δύο εξασφαλίζει τη σωστή σειρά RTL και την απόδοση μέσα στα κελιά.
Πώς μπορώ να αποτρέψω τους χρήστες από το να μετακινούν ή να αλλάζουν το μέγεθος ενός πίνακα στο τελικό αρχείο;
Χρησιμοποιήστε τις shape locks για να απενεργοποιήσετε τη μετακίνηση, την αλλαγή μεγέθους, την επιλογή κλπ. Αυτά τα κλειδώματα εφαρμόζονται και στους πίνακες.
Υποστηρίζεται η εισαγωγή εικόνας μέσα σε κελί ως φόντο;
Ναι. Μπορείτε να ορίσετε μια picture fill για ένα κελί· η εικόνα θα καλύπτει την περιοχή του κελιού ανάλογα με την επιλεγμένη λειτουργία (τέντωμα ή επικάλυψη).