Működő megoldás a diagram átméretezésére PPTX-ben
Áttekintés
Az Aspose komponensekkel létrehozott PowerPoint‑prezentációkba beágyazott OLE objektumként megjelenő Excel-diagramok az első aktiválásuk után méretet változtathatnak. Ez észrevehető különbséget okozhat a diagram megjelenése között aktiválás előtt és után. Ez a cikk elmagyarázza, miért történik az átméretezés, és bemutatja, hogyan lehet megakadályozni azt a diagram rögzített méretének az OLE‑kerethez való illesztésével.
A Excel-diagramok létrehozása és beágyazása OLE objektumként a prezentációkba részben elmagyaráztuk, hogyan hozhatunk létre egy Excel-diagramot az Aspose.Cells for Python via .NET segítségével, és hogyan ágyazhatjuk be egy PowerPoint‑prezentációba az Aspose.Slides for Python via .NET használatával. A objektum előnézeti probléma kezelésére a diagram képét a diagram OLE objektumkerethez rendeltük. A kimeneti prezentációban, amikor dupla‑klikkelsz a diagramképet megjelenítő OLE objektumkereten, az Excel-diagram aktiválódik. A felhasználók szerkeszthetik a beágyazott Excel‑munkafüzetet, majd a diára visszatérhetnek az aktivált munkafüzeten kívülre 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üzetnek saját ablakmérete van, amelyet az Excel megpróbál megtartani, amikor az objektum először aktiválódik. A dián lévő OLE keret függetlenül definiált méretekkel rendelkezik. Amikor az Excel‑munkafüzet aktiválódik, az Excel és a PowerPoint egyeztetik az objektum méretét, hogy megőrizzék arányait az beágyazási folyamat részeként. A munkafüzetablak és az OLE keret közötti különbségek ezért okozhatják az objektum átméretezését.
Működő megoldás
Illessze a diagram méretét az OLE kerethez a dián, és tartsa a diagramdimenziókat függetlenül a munkafüzetablaktól. Ez a megoldás új prezentációval vagy meglévő sablonnal egyaránt működik.
A példa az Aspose.Cells for Python via .NET és az Aspose.Slides for Python via .NET használatát igényli. Egy egyszerű oszlopdiagramot hoz létre egy aktív diagramlapon, és beágyazza a munkafüzetet XLS formátumban. Nem rendel diagramelőnézeti képet; a diagram akkor válik láthatóvá, amikor a OLE objektum aktiválódik a PowerPointban.
A példa egy új prezentációt hoz létre 9,5 × 4‑hüvelykes OLE kerettel, amely 0,5 hüvelykre van pozicionálva a bal élről, és 1 hüvelykre a tetejétől. A dia koordinátái és méretei pontokban vannak (72 pont hüvelykenként). Meglévő prezentáció esetén lásd a Sablon használata részt.
Rögzített diagramméret beállítása
Állítsa a size_with_window értékét false‑ra, hogy a diagramdimenziók függetlenek legyenek a munkafüzetablaktól. Állítsa be a chart_object méreteit a width és a height segítségével, a pontokat pixelekké konvertálva 96 pixel per hüvelyk alapján: egy 684 × 288 pont méretű keret 912 × 384 pixel méretű diagramnak felel meg. Állítsa a print_size értékét a PrintSizeType CUSTOM értékére. A példa a add_ole_object_frame segítségével ágyazza be a munkafüzetet, és 9,5 × 4‑hüvelykes OLE kerettel menti a prezentációt.
import io
import aspose.cells as cells
import aspose.cells.charts as charts
import aspose.slides as slides
workbook = cells.Workbook()
data_sheet = workbook.worksheets[0]
data_sheet.name = "Data"
data_sheet.cells.get("A1").put_value(10)
data_sheet.cells.get("A2").put_value(20)
chart_sheet_index = workbook.worksheets.add(cells.SheetType.CHART)
chart_sheet = workbook.worksheets[chart_sheet_index]
chart_index = chart_sheet.charts.add(charts.ChartType.COLUMN, 0, 0, 20, 10)
chart = chart_sheet.charts[chart_index]
chart.n_series.add("Data!A1:A2", True)
workbook.worksheets.active_sheet_index = chart_sheet_index
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Diak koordinátái és méretei pontban vannak (72 pont hüvelykenként).
width = 684.0 # 9,5 hüvelyk.
height = 288.0 # 4 hüvelyk.
chart.size_with_window = False
# Pontok átkonvertálása diagrampixelekké 96 pixel per hüvelyk alapján.
chart.chart_object.width = int(width / 72 * 96)
chart.chart_object.height = int(height / 72 * 96)
chart.print_size = cells.PrintSizeType.CUSTOM
with io.BytesIO() as workbook_stream:
workbook.save(workbook_stream, cells.SaveFormat.EXCEL_97_TO_2003)
data_info = slides.dom.ole.OleEmbeddedDataInfo(workbook_stream.getvalue(), "xls")
slide.shapes.add_ole_object_frame(36, 72, width, height, data_info)
presentation.save("chart-fixed-size.pptx", slides.export.SaveFormat.PPTX)
Sablon használata
A méretezési logika ugyanaz egy meglévő prezentáció esetén is. A példa adaptálásához:
- Töltse be a sablonprezentációt egy üres prezentáció létrehozása helyett.
- Ellenőrizze, hogy az első dián legalább három alakzat található, majd használja a 2. indexű alakzatot helykitöltőként.
- Vegye a keret szélességét és magasságát ebből az alakzatból, a 684 × 288 rögzített értékek helyett. Tartsa változatlanul a méretezési számításokat.
- Adja hozzá az OLE keretet a helykitöltő pozíciójához a 36 × 72 rögzített koordináták helyett.
- Távolítsa el a helykitöltőt a prezentáció mentése előtt.
GYIK
Miért változik 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 megpróbálja a kezdeti aktiváláskor visszaállítani az eredeti ablakméretet, míg a PowerPoint OLE‑keretének saját dimenziói vannak. A PowerPoint és az Excel egyeztetik a méretet az arányok megtartása érdekében, ami az átméretezést eredményezheti.
Hogyan tarthatom konzisztensnek a diagram és az OLE‑keret méretét?
Állítson be rögzített diagramdimenziókat, amelyek megegyeznek az OLE‑keret méretével, és használjon egy egyéni diagramnyomtatási méretet a munkafüzet beágyazása előtt. A fenti példa a szükséges beállításokat és egységkonverziókat mutatja be.
Elégséges a munkafüzet-ablak méretének illesztése?
A munkafüzet‑ablak méretének csak önmagában történő 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áljon rögzített diagramdimenziókat, 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 a helykitöltő méreteit és pozícióját használja. Új prezentáció esetén a keret méretét és pozícióját adja meg közvetlenül.
Használhatom ezt a példát más táblázatkezelő programokkal létrehozott diagramokkal?
A példa egy Aspose.Cells‑el létrehozott Excel‑munkafüzetet használ. Nem mutat be aktiválási viselkedést más táblázatkezelő programok esetén.