Rozwiązanie działające dla zmiany rozmiaru wykresu w PPTX
Przegląd
Wykresy Excel osadzone jako obiekty OLE w prezentacjach PowerPoint przy użyciu komponentów Aspose mogą zmieniać rozmiar po pierwszej aktywacji. Może to powodować zauważalną różnicę w wyglądzie wykresu przed i po aktywacji. Ten artykuł wyjaśnia, dlaczego zachodzi zmiana rozmiaru i pokazuje, jak jej zapobiec, dopasowując stałe wymiary wykresu do ramki OLE.
W Utwórz wykresy Excel i osadź je jako obiekty OLE w prezentacjach wyjaśniliśmy, jak utworzyć wykres Excel przy użyciu Aspose.Cells for Node.js via Java i osadzić go w prezentacji PowerPoint przy użyciu Aspose.Slides for Node.js via Java. Aby rozwiązać problem z podglądem obiektu, przypisaliśmy obraz wykresu do ramki obiektu OLE wykresu. W wynikowej prezentacji, gdy dwukrotnie klikniesz ramkę obiektu OLE wyświetlającą obraz wykresu, wykres Excel zostaje aktywowany. Użytkownicy mogą edytować osadzony skoroszyt Excel, a następnie powrócić do slajdu, klikając poza aktywowanym skoroszytem. Rozmiar ramki obiektu OLE zmienia się, gdy użytkownik wraca do slajdu, a współczynnik zmiany rozmiaru zależy od pierwotnych rozmiarów zarówno ramki obiektu OLE, jak i osadzonego skoroszytu Excel.
Przyczyna zmiany rozmiaru
Osadzony skoroszyt Excel ma własne wymiary okna, które Excel stara się zachować przy pierwszej aktywacji obiektu. Ramka OLE na slajdzie ma niezależnie określone wymiary. Gdy skoroszyt Excel jest aktywowany, Excel i PowerPoint negocjują rozmiar obiektu, aby utrzymać jego proporcje jako część procesu osadzania. Różnice między oknem skoroszytu a ramką OLE mogą więc powodować zmianę rozmiaru obiektu.
Działające rozwiązanie
Dopasuj rozmiar wykresu do ramki OLE na slajdzie i utrzymaj wymiary wykresu niezależne od okna skoroszytu. To rozwiązanie działa zarówno z nową prezentacją, jak i istniejącym szablonem.
Przykład wymaga Aspose.Cells for Node.js via Java i Aspose.Slides for Node.js via Java. Zainstaluj pakiety Node.js aspose.cells, aspose.slides.via.java i java. Uruchom dwa skrypty CommonJS poniżej w osobnych procesach Node.js, używając tego samego katalogu roboczego, ponieważ oba pakiety Aspose inicjalizują most Java podczas ładowania. Tworzy on prosty wykres kolumnowy na aktywnym arkuszu wykresu i osadza skoroszyt w formacie XLS. Nie przypisano obrazu podglądu wykresu; wykres staje się widoczny po aktywacji obiektu OLE w PowerPoint.
Przykład tworzy nową prezentację z ramką OLE o wymiarach 9,5 × 4 cala, umieszczoną 0,5 cala od lewej krawędzi i 1 cala od góry. Współrzędne i wymiary slajdu są podane w punktach (72 punkty na cal). W przypadku istniejącej prezentacji zobacz Użyj szablonu.
Ustaw stały rozmiar wykresu
Ustaw setSizeWithWindow na false, aby wymiary wykresu były niezależne od okna skoroszytu. Ustaw wymiary getChartObject za pomocą setWidth i setHeight, konwertując punkty na piksele przy użyciu 96 pikseli na cal: ramka o wymiarach 684 × 288 punktów odpowiada wykresowi o wymiarach 912 × 384 piksele. Ustaw setPrintSize na wartość CUSTOM typu PrintSizeType. Przykład osadza skoroszyt przy użyciu addOleObjectFrame i zapisuje prezentację z ramką OLE o wymiarach 9,5 × 4 cala.
Zapisz ten pierwszy skrypt jako create-fixed-chart.js. Tworzy on chart-fixed-size.xls z wykresem o wymiarach 912 × 384 piksele, pasującym do ramki 684 × 288 punktów użytej w drugim skrypcie. Nie jest wymagany żaden skoroszyt wejściowy.
const cells = require("aspose.cells");
const workbook = new cells.Workbook();
try {
const dataSheet = workbook.getWorksheets().get(0);
dataSheet.setName("Data");
dataSheet.getCells().get("A1").putValue(10);
dataSheet.getCells().get("A2").putValue(20);
const chartSheetIndex = workbook.getWorksheets().add(cells.SheetType.CHART);
const chartSheet = workbook.getWorksheets().get(chartSheetIndex);
const chartIndex = chartSheet.getCharts().add(cells.ChartType.COLUMN, 0, 0, 20, 10);
const chart = chartSheet.getCharts().get(chartIndex);
chart.getNSeries().add("Data!A1:A2", true);
workbook.getWorksheets().setActiveSheetIndex(chartSheetIndex);
// Dopasuj wymiary ramki OLE w punktach (72 punkty na cal).
const width = 684; // 9,5 cala.
const height = 288; // 4 cale.
chart.setSizeWithWindow(false);
// Konwertuj punkty na piksele wykresu przy użyciu 96 pikseli na cal.
chart.getChartObject().setWidth(Math.trunc(width / 72 * 96));
chart.getChartObject().setHeight(Math.trunc(height / 72 * 96));
chart.setPrintSize(cells.PrintSizeType.CUSTOM);
workbook.save("chart-fixed-size.xls", cells.SaveFormat.EXCEL_97_TO_2003);
} finally {
workbook.dispose();
}
// Wszystkie synchroniczne operacje zostały zakończone; zatrzymaj proces mostu Java.
process.exit(0);
Zapisz drugi skrypt jako embed-fixed-chart.js i uruchom go po create-fixed-chart.js. Odczytuje on wygenerowany skoroszyt XLS i zapisuje chart-fixed-size.pptx. Most Java wymaga explicite tablicy bajtów Java dla danych skoroszytu oraz wartości typu float Java dla współrzędnych i wymiarów ramki. Rozszerzenie xls odpowiada formatowi zapisanego skoroszytu.
const fs = require("fs");
const java = require("java");
const slides = require("aspose.slides.via.java");
const workbookBuffer = fs.readFileSync("chart-fixed-size.xls");
const workbookBytes = java.newArray("byte", Array.from(workbookBuffer));
const presentation = new slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
// Współrzędne i wymiary slajdu są w punktach (72 punkty na cal).
const width = 684; // 9,5 cala.
const height = 288; // 4 cale.
const dataInfo = new slides.OleEmbeddedDataInfo(workbookBytes, "xls");
slide.getShapes().addOleObjectFrame(java.newFloat(36), java.newFloat(72), java.newFloat(width), java.newFloat(height), dataInfo);
presentation.save("chart-fixed-size.pptx", slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
// Wszystkie synchroniczne operacje zostały zakończone; zatrzymaj proces mostu Java.
process.exit(0);
Użyj szablonu
Logika określania rozmiaru jest taka sama dla istniejącej prezentacji. Aby dostosować przykład:
- Wczytaj prezentację szablonu zamiast tworzyć pustą prezentację.
- Sprawdź, czy pierwszy slajd zawiera co najmniej trzy kształty, a następnie użyj kształtu o indeksie 2 jako symbolu zastępczego.
- Pobierz szerokość i wysokość ramki z tego kształtu zamiast używać stałych wartości 684 i 288. Użyj tych samych wymiarów w skrypcie tworzącym skoroszyt, zachowując niezmienione obliczenia rozmiaru, i wygeneruj ponownie skoroszyt XLS przed jego osadzeniem.
- Dodaj ramkę OLE w pozycji symbolu zastępczego zamiast stałych współrzędnych 36 i 72.
- Usuń symbol zastępczy przed zapisaniem prezentacji.
FAQ
Dlaczego mój osadzony wykres Excel zmienia rozmiar po aktywowaniu go w PowerPoint?
Dzieje się tak, ponieważ Excel próbuje przywrócić pierwotny rozmiar okna przy pierwszej aktywacji, podczas gdy ramka obiektu OLE w PowerPoint ma własne wymiary. PowerPoint i Excel negocjują rozmiar, aby zachować proporcje, co może powodować zmianę rozmiaru.
Jak mogę utrzymać spójność rozmiarów wykresu i ramki OLE?
Ustaw stałe wymiary wykresu, które odpowiadają ramce OLE, i użyj własnego rozmiaru wydruku wykresu przed osadzeniem skoroszytu. Powyższy przykład pokazuje wymagane ustawienia i konwersje jednostek.
Czy dopasowanie rozmiaru okna skoroszytu jest wystarczające?
Dopasowanie samego rozmiaru okna skoroszytu nie zapewnia niezawodnego zapobieżenia zmianie rozmiaru ramki OLE po aktywacji. Użyj stałych wymiarów wykresu, jak pokazano w przykładzie.
Czy to rozwiązanie działa zarówno z prezentacjami opartymi na szablonie, jak i z nowymi prezentacjami?
Tak. Dla szablonu użyj wymiarów i pozycji symbolu zastępczego. Dla nowej prezentacji podaj wymiary i pozycję ramki bezpośrednio.
Czy mogę używać tego przykładu z wykresami tworzonymi w innych programach arkuszy kalkulacyjnych?
Przykład używa skoroszytu Excel utworzonego przy pomocy Aspose.Cells. Nie demonstruje zachowania aktywacji dla innych programów arkuszy kalkulacyjnych.