Λύση λειτουργίας για την αλλαγή μεγέθους του διαγράμματος σε PPTX

Υπόβαθρο

Παρατηρήθηκε ότι τα διαγράμματα Excel που ενσωματώνονται ως αντικείμενα OLE σε παρουσίαση PowerPoint μέσω των στοιχείων Aspose αλλάζουν μέγεθος σε άγνωστο κλίμακα μετά την πρώτη ενεργοποίησή τους. Αυτή η συμπεριφορά δημιουργεί ορατή διαφορά στην παρουσίαση μεταξύ των καταστάσεων πριν και μετά την ενεργοποίηση του διαγράμματος. Η ομάδα Aspose διερεύνησε το ζήτημα λεπτομερώς και βρήκε μια λύση. Αυτό το άρθρο περιγράφει τις αιτίες του προβλήματος και τη σχετική διόρθωση.

Στο previous article, εξηγήσαμε πώς να δημιουργήσετε ένα διάγραμμα Excel με το Aspose.Cells for Java και να το ενσωματώσετε σε μια παρουσίαση PowerPoint χρησιμοποιώντας το Aspose.Slides for Java. Για την αντιμετώπιση του object preview issue, αντιστοιχίσαμε την εικόνα του διαγράμματος στο πλαίσιο αντικειμένου OLE του διαγράμματος. Στην έξοδο της παρουσίασης, όταν κάνετε διπλό κλικ στο πλαίσιο αντικειμένου OLE που εμφανίζει την εικόνα του διαγράμματος, το διάγραμμα Excel ενεργοποιείται. Οι τελικοί χρήστες μπορούν να κάνουν οποιεσδήποτε επιθυμητές αλλαγές στο υποκείμενο αρχείο εργασίας Excel και, στη συνέχεια, να επιστρέψουν στη σχετική διαφάνεια κάνοντας κλικ εκτός του ενεργοποιημένου αρχείου εργασίας. Το μέγεθος του πλαισίου αντικειμένου OLE αλλάζει όταν ο χρήστης επιστρέφει στη διαφάνεια, και ο παράγοντας αλλαγής μεγέθους διαφέρει ανάλογα με τα αρχικά μεγέθη τόσο του πλαισίου αντικειμένου OLE όσο και του ενσωματωμένου αρχείου εργασίας Excel.

Αιτία αλλαγής μεγέθους

Επειδή το αρχείο εργασίας Excel διαθέτει το δικό του μέγεθος παραθύρου, προσπαθεί να διατηρήσει το αρχικό του μέγεθος κατά την πρώτη ενεργοποίησή του. Το πλαίσιο αντικειμένου OLE, ωστόσο, έχει το δικό του μέγεθος. Σύμφωνα με τη Microsoft, όταν το αρχείο εργασίας Excel ενεργοποιείται, το Excel και το PowerPoint διαπραγματεύονται το μέγεθος και διατηρούν τις σωστές αναλογίες ως μέρος της διαδικασίας ενσωμάτωσης. Ανάλογα με τις διαφορές μεταξύ του μεγέθους του παραθύρου Excel και του μεγέθους ή της θέσης του πλαισίου αντικειμένου OLE, πραγματοποιείται αλλαγή μεγέθους.

Λύση που λειτουργεί

Υπάρχουν δύο δυνατά σενάρια για τη δημιουργία παρουσιάσεων PowerPoint χρησιμοποιώντας το Aspose.Slides for Java.

Scenario 1: Δημιουργία παρουσίασης με βάση υπάρχον πρότυπο.

Scenario 2: Δημιουργία παρουσίασης από το μηδέν.

Η λύση που παρέχουμε εδώ ισχύει για και τα δύο σενάρια. Η βάση όλων των προσεγγίσεων είναι η ίδια: το μέγεθος του ενσωματωμένου αντικειμένου OLE πρέπει να ταιριάζει με το πλαίσιο αντικειμένου OLE στη διαφάνεια PowerPoint. Θα συζητήσουμε τώρα τις δύο προσεγγίσεις για αυτή τη λύση.

Πρώτη Προσέγγιση

Σε αυτήν την προσέγγιση, θα μάθουμε πώς να ορίσουμε το μέγεθος του παραθύρου του ενσωματωμένου αρχείου εργασίας Excel ώστε να ταιριάζει με το μέγεθος του πλαισίου αντικειμένου OLE στη διαφάνεια PowerPoint.

Scenario 1

Έστω ότι έχουμε ορίσει ένα πρότυπο και θέλουμε να δημιουργήσουμε παρουσιάσεις με βάση αυτό. Υποθέτουμε ότι υπάρχει ένα σχήμα στη θέση 2 του προτύπου όπου θέλουμε να τοποθετήσουμε ένα πλαίσιο OLE που περιέχει ένα ενσωματωμένο αρχείο εργασίας Excel. Σε αυτό το σενάριο, το μέγεθος του πλαισίου αντικειμένου OLE είναι προκαθορισμένο—ταιριάζει με το μέγεθος του σχήματος στη θέση 2 του προτύπου. Το μόνο που χρειάζεται να κάνουμε είναι να ορίσουμε το μέγεθος του παραθύρου του αρχείου εργασίας ίσο με το μέγεθος εκείνου του σχήματος. Το παρακάτω απόσπασμα κώδικα εκπληρώνει αυτόν τον σκοπό:

// Ορίστε το πλάτος του παραθύρου του βιβλίου εργασίας σε ίντσες (διαιρεμένο με 576 καθώς το PowerPoint χρησιμοποιεί 576 εικονοστοιχεία ανά ίντσα).
workbook.getSettings().setWindowWidthInch(slide.getShapes().get_Item(2).getWidth() / 72f);
 
// Ορίστε το ύψος του παραθύρου του βιβλίου εργασίας σε ίντσες.
workbook.getSettings().setWindowHeightInch(slide.getShapes().get_Item(2).getHeight() / 72f);
 
// Αποθηκεύστε το βιβλίο εργασίας σε ροή μνήμης.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// Δημιουργήστε ένα πλαίσιο αντικειμένου OLE με τα ενσωματωμένα δεδομένα Excel.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    slide.getShapes().get_Item(2).getX(),
    slide.getShapes().get_Item (2).getY(),
    slide.getShapes().get_Item (2).getWidth(),
    slide.getShapes().get_Item (2).getHeight(),
    "Excel.Sheet.8",
    workbookStream.toByteArray());

Scenario 2

Ας πούμε ότι θέλουμε να δημιουργήσουμε μια παρουσίαση από το μηδέν και να συμπεριλάβουμε ένα πλαίσιο αντικειμένου OLE οποιουδήποτε μεγέθους με ενσωματωμένο αρχείο εργασίας Excel. Στο παρακάτω απόσπασμα κώδικα, δημιουργούμε ένα πλαίσιο αντικειμένου OLE 4 ίντσες ύψος και 9,5 ίντσες πλάτος στο x = 0,5 ίντσες και y = 1 ίντσα πάνω στη διαφάνεια. Στη συνέχεια ορίζουμε το παράθυρο του αρχείου εργασίας Excel στο ίδιο μέγεθος—4 ίντσες ύψος και 9,5 ίντσες πλάτος.

// Το επιθυμητό ύψος μας.
int desiredHeight = 288; // 4 ίντσες (4 * 72)
 
// Το επιθυμητό πλάτος μας.
int desiredWidth = 684; // 9.5 ίντσες (9.5 * 72)
 
// Ορίστε το μέγεθος του διαγράμματος με παράθυρο.
chart.setSizeWithWindow(true);
 
// Ορίστε το πλάτος του παραθύρου του βιβλίου εργασίας σε ίντσες (διαχωρισμένο με 576 καθώς το PowerPoint χρησιμοποιεί 576 εικονοστοιχεία ανά ίντσα).
workbook.getSettings().setWindowWidthInch(desiredHeight / 72f);
 
// Ορίστε το ύψος του παραθύρου του βιβλίου εργασίας σε ίντσες.
workbook.getSettings().setWindowHeightInch(desiredWidth / 72f);
 
// Αποθηκεύστε το βιβλίο εργασίας σε ροή μνήμης.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// Δημιουργήστε ένα πλαίσιο αντικειμένου OLE με τα ενσωματωμένα δεδομένα Excel.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    288,
    576,
    desiredWidth,
    desiredHeight,
    "Excel.Sheet.8",
    workbookStream.toByteArray());

Δεύτερη Προσέγγιση

Σε αυτήν την προσέγγιση, θα μάθουμε πώς να ορίσουμε το μέγεθος του διαγράμματος στο ενσωματωμένο αρχείο εργασίας Excel ώστε να ταιριάζει με το μέγεθος του πλαισίου αντικειμένου OLE στη διαφάνεια PowerPoint. Αυτή η προσέγγιση είναι χρήσιμη όταν το μέγεθος του διαγράμματος είναι γνωστό εκ των προτέρων και δεν θα αλλάξει.

Scenario 1

Έστω ότι έχουμε ορίσει ένα πρότυπο και θέλουμε να δημιουργήσουμε παρουσιάσεις με βάση αυτό. Υποθέτουμε ότι υπάρχει ένα σχήμα στη θέση 2 του προτύπου όπου προγραμματίζουμε να τοποθετήσουμε ένα πλαίσιο OLE που περιέχει ένα ενσωματωμένο αρχείο εργασίας Excel. Σε αυτό το σενάριο, το μέγεθος του πλαισίου OLE είναι προκαθορισμένο—ταίριασμα με το μέγεθος του σχήματος στη θέση 2 του προτύπου. Το μόνο που χρειάζεται να κάνουμε είναι να ορίσουμε το μέγεθος του διαγράμματος στο αρχείο εργασίας ίσο με το μέγεθος του σχήματος. Το παρακάτω απόσπασμα κώδικα εκπληρώνει αυτόν τον σκοπό:

// Ορίστε το μέγεθος του διαγράμματος χωρίς παράθυρο.
chart.setSizeWithWindow(false);
 
// Ορίστε το πλάτος του διαγράμματος σε εικονοστοιχεία (πολλαπλασιάστε επί 96 καθώς το Excel χρησιμοποιεί 96 εικονοστοιχεία ανά ίντσα).
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 72f) * 96f));
 
// Ορίστε το ύψος του διαγράμματος σε εικονοστοιχεία.
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 72f) * 96f));
 
// Ορίστε το μέγεθος εκτύπωσης του διαγράμματος.
chart.setPrintSize(PrintSizeType.CUSTOM);
 
// Αποθηκεύστε το βιβλίο εργασίας σε ροή μνήμης.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// Δημιουργήστε ένα πλαίσιο αντικειμένου OLE με τα ενσωματωμένα δεδομένα Excel.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    slide.getShapes().get_Item(2).getX(),
    slide.getShapes().get_Item (2).getY(),
    slide.getShapes().get_Item (2).getWidth(),
    slide.getShapes().get_Item (2).getHeight(),
    "Excel.Sheet.8",
    workbookStream.toByteArray());

Scenario 2:

Έστω ότι θέλουμε να δημιουργήσουμε μια παρουσίαση από το μηδέν και να συμπεριλάβουμε ένα πλαίσιο αντικειμένου OLE οποιουδήποτε μεγέθους με ενσωματωμένο αρχείο εργασίας Excel. Στο παρακάτω απόσπασμα κώδικα, δημιουργούμε ένα πλαίσιο αντικειμένου OLE με ύψος 4 ίντσες και πλάτος 9,5 ίντσες στη διαφάνεια στο x = 0,5 ίντσες και y = 1 ίντσα. Επίσης ορίζουμε το αντίστοιχο μέγεθος διαγράμματος στις ίδιες διαστάσεις: ύψος 4 ίντσες και πλάτος 9,5 ίντσες.

// Το επιθυμητό ύψος μας.
int desiredHeight = 288; // 4 ίντσες (4 * 72)
 
// Το επιθυμητό πλάτος μας.
int desiredWidth = 684; // 9.5 ίντσες (9.5 * 72)
 
// Καθορίστε το μέγεθος του διαγράμματος χωρίς παράθυρο.
chart.setSizeWithWindow(false);
 
// Ορίστε το πλάτος του διαγράμματος σε εικονοστοιχεία (πολλαπλασιάστε με 96 καθώς το Excel χρησιμοποιεί 96 εικονοστοιχεία ανά ίντσα).
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 576f) * 96f));
 
// Ορίστε το ύψος του διαγράμματος σε εικονοστοιχεία.
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 576f) * 96f));
 
// Αποθηκεύστε το βιβλίο εργασίας σε ροή μνήμης.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// Δημιουργήστε ένα πλαίσιο αντικειμένου OLE με τα ενσωματωμένα δεδομένα Excel.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    288,
    576,
    desiredWidth,
    desiredHeight,
    "Excel.Sheet.8",
    workbookStream.toByteArray());

Συμπέρασμα

Υπάρχουν δύο προσεγγίσεις για την επίλυση του ζητήματος αλλαγής μεγέθους του διαγράμματος. Η επιλογή της προσέγγισης εξαρτάται από τις απαιτήσεις και την περίπτωση χρήσης. Και οι δύο προσεγγίσεις λειτουργούν με τον ίδιο τρόπο είτε οι παρουσιάσεις δημιουργούνται από πρότυπο είτε από το μηδέν. Επιπλέον, δεν υπάρχει όριο στο μέγεθος του πλαισίου αντικειμένου OLE σε αυτή τη λύση.

FAQ

Γιατί το ενσωματωμένο διάγραμμά μου Excel αλλάζει μέγεθος μετά την ενεργοποίησή του στο PowerPoint;

Αυτό συμβαίνει επειδή το Excel προσπαθεί να επαναφέρει το αρχικό μέγεθος του παραθύρου κατά την πρώτη ενεργοποίηση, ενώ το πλαίσιο αντικειμένου OLE στο PowerPoint έχει τις δικές του διαστάσεις. Το PowerPoint και το Excel διαπραγματεύονται το μέγεθος για διατήρηση της αναλογίας διαστάσεων, πράγμα που μπορεί να προκαλέσει την αλλαγή μεγέθους.

Μπορεί να αποφευχθεί εντελώς αυτό το πρόβλημα αλλαγής μεγέθους;

Ναι. Αν ταιριάξετε το μέγεθος του παραθύρου του αρχείου εργασίας Excel ή το μέγεθος του διαγράμματος με το μέγεθος του πλαισίου αντικειμένου OLE πριν από την ενσωμάτωση, μπορείτε να διατηρήσετε τα μεγέθη των διαγραμμάτων συνεπή.

Ποια προσέγγιση πρέπει να επιλέξω, ορισμός του μεγέθους του παραθύρου του αρχείου εργασίας ή ορισμός του μεγέθους του διαγράμματος;

Χρησιμοποιήστε Approach 1 (window size) αν θέλετε να διατηρήσετε την αναλογία του αρχείου εργασίας και ίσως να επιτρέψετε αλλαγή μεγέθους αργότερα.
Χρησιμοποιήστε Approach 2 (chart size) αν οι διαστάσεις του διαγράμματος είναι σταθερές και δεν θα αλλάξουν μετά την ενσωμάτωση.

Λειτουργούν αυτές οι μέθοδοι και με παρουσιάσεις που βασίζονται σε πρότυπο και με νέες παρουσιάσεις;

Ναι. Και οι δύο προσεγγίσεις λειτουργούν με τον ίδιο τρόπο για παρουσιάσεις που δημιουργούνται από πρότυπα και από το μηδέν.

Υπάρχει όριο στο μέγεθος του πλαισίου αντικειμένου OLE;

Όχι. Μπορείτε να ορίσετε το πλαίσιο OLE σε οποιοδήποτε μέγεθος, εφόσον κλιμακώνεται κατάλληλα με το μέγεθος του αρχείου εργασίας ή του διαγράμματος.

Μπορώ να χρησιμοποιήσω αυτές τις μεθόδους με διαγράμματα που δημιουργήθηκαν σε άλλα προγράμματα λογιστικού φύλλου;

Τα παραδείγματα έχουν σχεδιαστεί για διαγράμματα Excel που δημιουργούνται με το Aspose.Cells, αλλά οι αρχές ισχύουν και για άλλα προγράμματα λογιστικού φύλλου συμβατά με OLE, εφόσον υποστηρίζουν παρόμοιες επιλογές μεγέθους.

Σχετικές Ενότητες