Tworzenie wykresów Excel i osadzanie ich w prezentacjach jako obiekty OLE

Tło

W programie PowerPoint używanie edytowalnych wykresów do graficznego wyświetlania danych jest powszechną praktyką. Aspose obsługuje tworzenie wykresów Excel przy użyciu Aspose.Cells for Java, a te wykresy mogą być następnie osadzane jako obiekty OLE na slajdach PowerPoint za pośrednictwem Aspose.Slides for Java. Ten artykuł opisuje niezbędne kroki i zawiera przykłady kodu Java do tworzenia wykresu Excel i osadzania go jako obiektu OLE w prezentacji PowerPoint przy użyciu Aspose.Cells i Aspose.Slides.

Wymagane kroki

Poniższa kolejność kroków jest wymagana do utworzenia i osadzenia wykresu Excel jako obiektu OLE na slajdzie PowerPoint:

  1. Utwórz wykres Excel przy użyciu Aspose.Cells.
  2. Ustaw rozmiar OLE wykresu Excel przy użyciu Aspose.Cells.
  3. Uzyskaj obraz wykresu Excel przy użyciu Aspose.Cells.
  4. Osadź wykres Excel jako obiekt OLE w prezentacji PPTX przy użyciu Aspose.Slides.
  5. Zastąp obraz „EMBEDDED OLE OBJECT” obrazem uzyskanym w kroku 3, aby rozwiązać problem problem podglądu obiektu.
  6. Zapisz prezentację na dysku w formacie PPTX.

Implementacja wymaganych kroków

Implementacja w Javie powyższych kroków wygląda następująco:

// Utwórz skoroszyt.
Workbook workbook = new Workbook();

// Dodaj wykres Excel.
int chartRows = 55;
int chartCols = 25;
int chartSheetIndex = AddExcelChartInWorkbook(workbook, chartRows, chartCols);

// Ustaw rozmiar OLE wykresu.
workbook.getWorksheets().setOleSize(0, chartRows, 0, chartCols);

// Pobierz obraz wykresu i zapisz go do strumienia.
com.aspose.cells.ImageOrPrintOptions printOptions = new com.aspose.cells.ImageOrPrintOptions();
printOptions.setImageFormat(com.aspose.cells.ImageFormat.getPng());
ByteArrayOutputStream imageStream = new ByteArrayOutputStream();
workbook.getWorksheets().get(chartSheetIndex).getCharts().get(0).toImage(imageStream, printOptions);

// Zapisz skoroszyt do strumienia.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream(); 
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);

// Utwórz prezentację.
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);

// Dodaj skoroszyt do slajdu.
AddExcelChartInPresentation(presentation, slide, workbookStream.toByteArray(), imageStream.toByteArray());

// Zapisz prezentację na dysku.
presentation.save("OutputChart.pptx", SaveFormat.Pptx);
presentation.dispose();
static void AddExcelChartInPresentation(Presentation presentation, ISlide slide, byte[] workbookArray, byte[] chartImage) throws Exception
{
    double oleHeight = presentation.getSlideSize().getSize().getHeight();
    double oleWidth = presentation.getSlideSize().getSize().getWidth();
 
    // Utwórz obiekt LoadOptions typu EXCEL_97_TO_2003.
    com.aspose.cells.LoadOptions loadOptions = new com.aspose.cells.LoadOptions(com.aspose.cells.FileFormatType.EXCEL_97_TO_2003);         
    Workbook workbook = new Workbook(new ByteArrayInputStream(workbookArray),loadOptions);
 
    IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(0f, 0f, (float)oleWidth, (float)oleHeight, "Excel.Sheet.8", workbookArray);
    oleFrame.getSubstitutePictureFormat().getPicture().setImage(presentation.getImages().addImage(new ByteArrayInputStream(chartImage)));
}
static int AddExcelChartInWorkbook(Workbook workbook, int chartRows, int chartCols)
{
    // Tablica nazw komórek.
    String[] cellNames = new String[]
    {
        "A1", "A2", "A3", "A4",
        "B1", "B2", "B3", "B4",
        "C1", "C2", "C3", "C4",
        "D1", "D2", "D3", "D4",
        "E1", "E2", "E3", "E4"
    };

    // Tablica danych komórek.
    int[] cellValues = new int[]
    {
        67, 86, 68, 91,
        44, 64, 89, 48,
        46, 97, 78, 60,
        43, 29, 69, 26,
        24, 40, 38, 25
    };

    // Dodaj nowy arkusz, aby wypełnić komórki danymi.
    int dataSheetIndex = workbook.getWorksheets().add();
    Worksheet dataSheet = workbook.getWorksheets().get(dataSheetIndex);
    String sheetName = "DataSheet";
    dataSheet.setName(sheetName);

    // Wypełnij arkusz danych danymi.
    int size = Array.getLength(cellNames);
    for (int i = 0; i < size; i++)
    {
        String cellName = cellNames[i];
        int cellValue = cellValues[i];
        dataSheet.getCells().get(cellName).setValue(cellValue);
    }

    // Dodaj arkusz wykresu.
    int worksheetIndex = workbook.getWorksheets().add(SheetType.CHART);
    Worksheet chartSheet = workbook.getWorksheets().get(worksheetIndex);
    chartSheet.setName("ChartSheet");
    int chartSheetIndex = chartSheet.getIndex();

    // Dodaj wykres do arkusza wykresu z serią danych z arkusza danych.
    int chartIndex = chartSheet.getCharts().add(ChartType.COLUMN, 0, chartRows, 0, chartCols);
    Chart chart = chartSheet.getCharts().get(chartIndex);
    
    chart.getNSeries().add(sheetName + "!A1:E1", false);
    chart.getNSeries().add(sheetName + "!A2:E2", false);
    chart.getNSeries().add(sheetName + "!A3:E3", false);
    chart.getNSeries().add(sheetName + "!A4:E4", false);

    // Ustaw arkusz wykresu jako aktywny arkusz.
    workbook.getWorksheets().setActiveSheetIndex(chartSheetIndex);
    return chartSheetIndex;
}

Prezentacja utworzona w powyższy sposób będzie zawierać wykres Excel jako obiekt OLE, który można aktywować podwójnym kliknięciem w ramkę obiektu OLE.

Podsumowanie

Korzystając z Aspose.Cells for Java w połączeniu z Aspose.Slides for Java, możemy tworzyć dowolny wykres Excel obsługiwany przez Aspose.Cells i osadzać go jako obiekt OLE na slajdzie PowerPoint. Rozmiar OLE wykresu Excel również może być określony. Użytkownicy końcowi mogą następnie edytować wykres Excel tak jak każdy inny obiekt OLE.

Powiązane sekcje