Λειτουργική λύση για αλλαγή μεγέθους γραφήματος σε PPTX

Ιστορικό

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

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

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

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

Λειτουργική λύση

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

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

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

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

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

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

Σενάριο 1

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

import com.aspose.slides.*;
import java.io.ByteArrayOutputStream;

// Ορίστε το πλάτος του παραθύρου του φύλλου εργασίας σε ίντσες (διαιρεμένο δια 72, καθώς το PowerPoint χρησιμοποιεί 72 σημεία ανά ίντσα).
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.
IOleEmbeddedDataInfo dataInfo = new OleEmbeddedDataInfo(workbookStream.toByteArray(), "xls");
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(),
    dataInfo);

Σενάριο 2

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

import com.aspose.slides.*;
import java.io.ByteArrayOutputStream;

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

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

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

Σενάριο 1

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

import com.aspose.slides.*;
import java.io.ByteArrayOutputStream;

// Ορίστε το μέγεθος του γραφήματος χωρίς παράθυρο.
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(com.aspose.cells.PrintSizeType.CUSTOM);
 
// Αποθηκεύστε το βιβλίο εργασίας σε ροή μνήμης.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// Δημιουργήστε ένα πλαίσιο αντικειμένου OLE με τα ενσωματωμένα δεδομένα Excel.
IOleEmbeddedDataInfo dataInfo = new OleEmbeddedDataInfo(workbookStream.toByteArray(), "xls");
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(),
    dataInfo);

Σενάριο 2:

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

import com.aspose.slides.*;
import java.io.ByteArrayOutputStream;

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

Συμπέρασμα

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

Συχνές ερωτήσεις

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

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

Είναι δυνατόν να αποτραπεί εντελώς αυτό το πρόβλημα αλλαγής μεγέθους;

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

Ποια προσέγγιση πρέπει να επιλέξω, ορίζοντας το μέγεθος του παραθύρου του βιβλίου εργασίας ή το μέγεθος του γραφήματος;

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

Θα λειτουργούν αυτές οι μέθοδοι και για παρουσιάσεις με πρότυπο και για νέες παρουσιάσεις;

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

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

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

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

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

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