Működő megoldás a diagram átméretezésére PPTX-ben
Háttér
Az Aspose komponensekkel PowerPoint prezentációkba beágyazott OLE objektumként megjelenő Excel-diagramok az első aktiválás után megváltoztathatják méretüket. Ez észrevehető különbséget eredményezhet a diagram megjelenésében az aktiválás előtti és utáni állapot között. Ebben a cikkben magyarázzuk, miért fordul elő az átméretezés, és bemutatjuk, hogyan lehet megakadályozni azt a diagram rögzített méretének az OLE kerethez való illesztésével.
Az Excel-diagramok létrehozása és OLE objektumként való beágyazása a prezentációkba cikkben bemutattuk, hogyan hozhatunk létre Excel-diagramot az Aspose.Cells for Python via Java segítségével, és hogyan ágyazzuk be egy PowerPoint-prezentációba az Aspose.Slides for Python via Java használatával. Az objektum előnézeti probléma megoldásához a diagramképét a diagram OLE objektumkeretéhez rendeltük. A kimeneti prezentációban, ha duplán kattintunk a diagramképet megjelenítő OLE objektumkeretre, aktiválódik az Excel-diagram. A felhasználók szerkeszthetik a beágyazott Excel-munkafüzetet, majd a diára visszatérhetnek a munkafüzeten kívül kattintva. Az OLE objektumkeret mérete megváltozik, amikor a felhasználó visszatér a diára, és az átméretezési arány a OLE objektumkeret és a beágyazott Excel-munkafüzet eredeti méreteitől függ.
Az átméretezés oka
A beágyazott Excel-munkafüzet saját ablakmérettel rendelkezik, amelyet az Excel megpróbál megtartani az objektum első aktiválásakor. A dián lévő OLE keret függetlenül definiált méretekkel bír. Amikor az Excel-munkafüzet aktiválódik, az Excel és a PowerPoint egyeztetik az objektum méretét, hogy a beágyazási folyamat részeként megtartsák az arányokat. A munkafüzetablak és az OLE keret közötti különbségek ezért az objektum átméreteződését okozhatják.
Működő megoldás
A példa az Aspose.Cells for Python via Java és az Aspose.Slides for Python via Java komponenseket igényli. Egy egyszerű oszlopdiagramot hoz létre egy aktív diagramlapon, és beágyazza a munkafüzetet XLS formátumban. Nem kerül diagram előnézeti kép hozzárendelésre; a diagram akkor válik láthatóvá, amikor a OLE objektum aktiválódik PowerPointban.
A példa egy új prezentációt hoz létre egy 9,5 × 4 hüvelykes OLE kerettel, amely 0,5 hüvelyk távolságra van a bal széltől és 1 hüvelyk távolságra a tetejétől. A dia koordinátái és méretei pontokban (72 pont hüvelykenként) vannak megadva. Létező prezentáció esetén lásd a Sablon használata részt.
import jpype
import asposecells
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposecells.api import ChartType, FileFormatType, PrintSizeType, SheetType, Workbook
from asposeslides.api import OleEmbeddedDataInfo, Presentation, SaveFormat
ByteArrayOutputStream = jpype.JClass("java.io.ByteArrayOutputStream")
workbook = Workbook()
try:
data_sheet = workbook.getWorksheets().get(0)
data_sheet.setName("Data")
data_sheet.getCells().get("A1").putValue(10)
data_sheet.getCells().get("A2").putValue(20)
chart_sheet_index = workbook.getWorksheets().add(SheetType.CHART)
chart_sheet = workbook.getWorksheets().get(chart_sheet_index)
chart_index = chart_sheet.getCharts().add(ChartType.COLUMN, 0, 0, 20, 10)
chart = chart_sheet.getCharts().get(chart_index)
chart.getNSeries().add("Data!A1:A2", True)
workbook.getWorksheets().setActiveSheetIndex(chart_sheet_index)
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
# A dia koordinátái és méretei pontokban vannak megadva (72 pont hüvelykenként).
width = 684.0 # 9,5 hüvelyk.
height = 288.0 # 4 hüvelyk.
chart.setSizeWithWindow(False)
# Konvertálja a pontokat diagrampixelekre 96 pixel hüvelykenként.
chart.getChartObject().setWidth(int(width / 72.0 * 96.0))
chart.getChartObject().setHeight(int(height / 72.0 * 96.0))
chart.setPrintSize(PrintSizeType.CUSTOM)
workbook_stream = ByteArrayOutputStream()
workbook.save(workbook_stream, FileFormatType.EXCEL_97_TO_2003)
workbook_data = workbook_stream.toByteArray()
data_info = OleEmbeddedDataInfo(workbook_data, "xls")
slide.getShapes().addOleObjectFrame(36.0, 72.0, width, height, data_info)
presentation.save("chart-fixed-size.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
finally:
workbook.dispose()
Rögzített diagramméret beállítása
Állítsuk a setSizeWithWindow értékét false-ra, hogy a diagram méretei függetlenek legyenek a munkafüzet ablakától. A getChartObject méreteit állítsuk be a setWidth és a setHeight segítségével, a pontok átváltásával pixelekre 96 pixel hüvelykenként: a 684 × 288 pontot mérő keret 912 × 384 pixelnek felel meg. A setPrintSize értékét állítsuk a PrintSizeType CUSTOM értékére. A példa a munkafüzetet a addOleObjectFrame segítségével ágyazza be, és egy 9,5 × 4 hüvelykes OLE kerettel menti a prezentációt.
Sablon használata
A méretlogika ugyanaz egy meglévő prezentáció esetén is. A példa adaptálásához:
- Töltsük be a sablonprezentációt az üres prezentáció létrehozása helyett.
- Ellenőrizzük, hogy az első dia legalább három alakzatot tartalmaz-e, majd a 2-es indexű alakzatot használjuk helykitöltőként.
- Vessük át a keret szélességét és magasságát erről az alakzatról a 684 és 288 rögzített értékek helyett. Tartsuk változatlanul a méret számításokat.
- Adjunk hozzá OLE keretet a helykitöltő pozíciójában a 36 és 72 rögzített koordináták helyett.
- Távolítsuk el a helykitöltőt a prezentáció mentése előtt.
GYIK
Miért változik meg a beágyazott Excel-diagram mérete a PowerPointban történő aktiválás után?
Ez azért történik, mert az Excel az első aktiváláskor megpróbálja visszaállítani az eredeti ablakméretet, míg a PowerPointban lévő OLE objektumkeretnek saját méretei vannak. A PowerPoint és az Excel egyeztetik a méretet, hogy megtartsák a képarányt, ami az átméretezést eredményezheti.
Hogyan tarthatom konzisztensnek a diagram és az OLE keret méreteit?
Állítsunk be rögzített diagramméreteket, amelyek megegyeznek az OLE kerettel, és használjunk egyedi diagramnyomtatási méretet a munkafüzet beágyazása előtt. A fenti példa bemutatja a szükséges beállításokat és egységátváltásokat.
Elégséges a munkafüzetablak méretének illesztése?
A munkafüzetablak méretének puszta illesztése nem biztos, hogy megbízhatóan megakadályozza az OLE keret méretének változását aktiválás után. Használjunk rögzített diagramméreteket, ahogy a példában látható.
Működik ez a megoldás sablonalapú és új prezentációk esetén is?
Igen. Sablon esetén használjuk a helykitöltő méreteit és pozícióját. Új prezentáció esetén közvetlenül adjuk meg a keret méreteit és pozícióját.
Használhatom ezt a példát más táblázatkezelő programokkal készített diagramokkal?
A példa egy Aspose.Cells által létrehozott Excel-munkafüzetet használ. Nem mutatja be más táblázatkezelő programok esetén a aktiválási viselkedést.