Kelola Buku Kerja Bagan dalam Presentasi di Android

Gambaran Umum

Artikel ini menjelaskan cara bekerja dengan buku kerja bagan di Aspose.Slides. Ini menunjukkan cara membaca dan menulis data bagan melalui aliran buku kerja, menggunakan sel buku kerja sebagai label data bagan, mengakses koleksi lembar kerja, dan menentukan tipe sumber data untuk nilai bagan.

Artikel ini juga mencakup penggunaan buku kerja eksternal sebagai sumber data bagan. Contoh-contoh menunjukkan cara membuat dan menetapkan buku kerja eksternal, mengambil jalur buku kerja eksternal yang terhubung ke bagan, dan mengedit data bagan ketika buku kerja tersedia.

Untuk sel buku kerja yang mewakili data yang hilang, lihat Kontrol Tampilan Sel Kosong untuk perbedaan antara sel kosong dan nol, serta perbandingan bagan garis dari mode tampilan yang tersedia.

Sertakan Data dari Baris dan Kolom Tersembunyi

Gunakan IChart.setPlotVisibleCellsOnly untuk mengontrol apakah sebuah bagan menggambarkan data dari baris dan kolom lembar kerja yang tersembunyi. Atur ke true untuk menggambarkan hanya sel yang terlihat, atau false untuk menyertakan sel yang terlihat dan tersembunyi. Pengaturan ini mengontrol pemetaan bagan; tidak menyembunyikan atau menampilkan kembali baris atau kolom lembar kerja.

contoh presentasi berisi bagan kolom sebagai bentuk pertama pada slide pertama. Lembar kerja tersemat, Sheet1, berisi rentang sumber berikut, A1:C4. Baris 3 dan kolom C disembunyikan, tetapi sel‑selnya tetap berisi nilai.

Baris lembar kerja A: Bulan B: Retail C: Wholesale (kolom tersembunyi)
2 Januari 10 30
3 (baris tersembunyi) Februari 40 60
4 Maret 20 50

Akses sel sumber melalui IChartData.getChartDataWorkbook dan baca IChartDataCell.isHidden untuk memeriksa status tersembunyi mereka. Metode ini melaporkan status tersembunyi tanpa mengubahnya. Dalam file ini, B2 terlihat, B3 termasuk dalam baris tersembunyi, dan C2 termasuk dalam kolom tersembunyi; contoh mencetak false, true, dan true secara berurutan.

Untuk contoh ini, segarkan data bagan setelah mengubah pengaturan pemetaan: pertahankan buku kerja tersemat dengan readWorkbookStream dan muat ulang dengan writeWorkbookStream. Saat menyertakan semua sel, juga gunakan setRange untuk memulihkan rentang lengkap, termasuk kategori Februari yang tersembunyi. Mengubah flag saja tidak cukup untuk menyegarkan data bagan yang di‑cache pada contoh ini serta label kategori.

import com.aspose.slides.*;

Presentation presentation = new Presentation("hidden-source-data.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    int shapeCount = slide.getShapes().size();
    if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
        IChart chart = (IChart) slide.getShapes().get_Item(0);
        IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
        System.out.println("B2 hidden: " + workbook.getCell(0, "B2").isHidden());
        System.out.println("B3 hidden: " + workbook.getCell(0, "B3").isHidden());
        System.out.println("C2 hidden: " + workbook.getCell(0, "C2").isHidden());

        byte[] workbookData = chart.getChartData().readWorkbookStream();
        for (boolean visibleOnly : new boolean[] { true, false }) {
            chart.setPlotVisibleCellsOnly(visibleOnly);

            // Segarkan data bagan dari buku kerja tersemat.
            chart.getChartData().writeWorkbookStream(workbookData);
            if (!visibleOnly) {
                // Pulihkan rentang sumber lengkap, termasuk kategori tersembunyi.
                chart.getChartData().setRange("Sheet1!$A$1:$C$4");
            }

            presentation.save("hidden_cells_" + visibleOnly + ".pptx", SaveFormat.Pptx);
        }
    } else {
        System.out.println("The first shape is not a chart.");
    }
} finally {
    presentation.dispose();
}

Contoh menyimpan dua versi presentasi: satu hanya dengan nilai Retail yang terlihat (10 dan 20), dan satu lagi dengan semua enam nilai. Gambar di bawah mengilustrasikan dua mode pemetaan. Baris 3 dan kolom C tetap tersembunyi pada kedua buku kerja tersemat.

Hanya sel yang terlihat (true) Semua sel (false)
Hanya sel yang terlihat: nilai Retail 10 dan 20 untuk Januari dan Maret. Semua sel: nilai Retail dan Wholesale untuk Januari, Februari, dan Maret.

Sel tersembunyi yang berisi nilai berbeda dari sel kosong. IChart.setDisplayBlanksAs mengontrol cara nilai yang hilang ditampilkan; tidak menyertakan atau mengecualikan data sumber tersembunyi. Lihat Kontrol Tampilan Sel Kosong untuk contoh.

Mendapatkan Rentang Data Bagan

Sebelum memperbarui data buku kerja dalam presentasi yang ada, periksa rentang sumber untuk mengidentifikasi sel lembar kerja mana yang digunakan setiap bagan. Metode IChartData.getRange mengembalikan rentang data saat ini sebagai formula yang memenuhi kualifikasi lembar kerja, seperti Sheet1!$A$1:$D$5. Di sini, Sheet1 adalah nama lembar kerja, ! memisahkannya dari rentang sel, dan $A$1:$D$5 mengidentifikasi sel A1 sampai D5, inklusif. Tanda dolar menunjukkan referensi baris dan kolom absolut.

Metode ini membaca rentang saat ini tanpa mengubah bagan atau buku kerjanya. Jika bagan tidak menggunakan buku kerja sebagai sumber data, ia akan melempar InvalidOperationException. Untuk informasi lebih lanjut, lihat Referensi API ChartData.

Contoh ini membuka sebuah presentasi dan memeriksa bentuk‑bentuk langsung pada setiap slide untuk bagan. Ia mencetak nama setiap bagan dan rentang sumbernya. Jika sebuah bagan tidak menggunakan buku kerja, ia mencetak pesan dan melanjutkan ke bagan berikutnya.

import com.aspose.slides.*;
import com.aspose.slides.exceptions.InvalidOperationException;

Presentation presentation = new Presentation("presentation.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        for (IShape shape : slide.getShapes()) {
            if (shape instanceof IChart) {
                IChart chart = (IChart) shape;
                try {
                    String range = chart.getChartData().getRange();
                    System.out.println(chart.getName() + ": " + range);
                } catch (InvalidOperationException exception) {
                    System.out.println(chart.getName() + ": The chart does not use a workbook as its data source.");
                }
            }
        }
    }
} finally {
    presentation.dispose();
}

Baca dan Tulis Data Bagan dari Buku Kerja

Aspose.Slides for Android via Java menyediakan metode readWorkbookStream dan writeWorkbookStream yang memungkinkan Anda membaca dan menulis buku kerja data bagan (berisi data bagan yang diedit dengan Aspose.Cells). Catatan bahwa data bagan harus diatur dengan cara yang sama atau memiliki struktur yang mirip dengan sumbernya.

Contoh ini menggunakan sebuah presentasi dengan bagan sebagai bentuk pertama pada slide pertama. Ia membaca buku kerja tersemat ke dalam array byte, menghapus seri dan kategori yang ada, dan menulis kembali buku kerja yang sama. Perubahan tetap berada di memori; contoh tidak menyimpan presentasi.

import com.aspose.slides.*;

Presentation presentation = new Presentation("chart.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    int shapeCount = slide.getShapes().size();
    if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
        IChart chart = (IChart) slide.getShapes().get_Item(0);
        IChartData chartData = chart.getChartData();
        byte[] workbookData = chartData.readWorkbookStream();

        chartData.getSeries().clear();
        chartData.getCategories().clear();

        chartData.writeWorkbookStream(workbookData);
    } else {
        System.out.println("The first shape is not a chart.");
    }
} finally {
    presentation.dispose();
}

Validasi Tata Letak Bagan Setelah Modifikasi Buku Kerja

Ketika Anda mengganti buku kerja tersemat dengan yang telah dimodifikasi, bagan tetap mempertahankan koleksi seri dan kategori aslinya. Ketidaksesuaian ini dapat menyebabkan IChart.validateChartLayout gagal dengan kesalahan indeks di luar jangkauan. Hapus seri dan kategori yang ada sebelum menulis kembali buku kerja yang diperbarui ke bagan. Contoh ini menggunakan bagan yang merupakan bentuk pertama pada slide pertama. Komentar menandai tempat pengeditan buku kerja; contoh yang dapat dijalankan menulis kembali buku kerja asli dan memvalidasi tata letak di memori.

import com.aspose.slides.*;

Presentation presentation = new Presentation("chart.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    int shapeCount = slide.getShapes().size();
    if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
        IChart chart = (IChart) slide.getShapes().get_Item(0);
        IChartData chartData = chart.getChartData();
        byte[] workbookData = chartData.readWorkbookStream();

        // Modifikasi byte workbook di sini, misalnya, menggunakan Aspose.Cells.

        chartData.getSeries().clear();
        chartData.getCategories().clear();

        chartData.writeWorkbookStream(workbookData);
        chart.validateChartLayout();
    } else {
        System.out.println("The first shape is not a chart.");
    }
} finally {
    presentation.dispose();
}

Penghapusan koleksi menghilangkan referensi data usang sebelum buku kerja ditulis kembali. Bangun kembali pemetaan seri dan kategori yang diperlukan untuk buku kerja yang diperbarui sebelum menggunakan bagan.

Atur Format Angka Kustom untuk Sel Buku Kerja

Gunakan IChartDataCell.setCustomNumberFormat untuk mengontrol bagaimana nilai numerik ditampilkan dalam buku kerja tersemat bagan. Misalnya, sebuah laporan mungkin memerlukan tingkat konversi yang ditampilkan sebagai persentase dengan empat tempat desimal dan koefisien yang ditampilkan dengan lima tempat desimal. Simpan kedua nilai secara numerik agar tetap tersedia untuk perhitungan dan pemetaan bagan.

Format angka mengubah tampilan, bukan nilai yang disimpan. Format 0.0000% menampilkan 0.125 sebagai 12.5000%; tidak menggantikan angka yang disimpan dengan 12.5. Demikian pula, 0.00000 menampilkan 0.1234567 sebagai 0.12346 tanpa membulatkan nilai yang disimpan. Jika format kustom berupa string kosong (""), format yang dikembalikan oleh getPresetNumberFormat akan digunakan sebagai gantinya.

Contoh berikut membuat bagan kolom dan mengakses sel‑nya melalui getChartDataWorkbook. Pada lembar kerja 0, B2 berisi tingkat konversi dan C2 berisi koefisien. Kedua sel menyuplai nilai bagan. Contoh juga mengaktifkan label nilai yang terhubung ke format sumber.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(720, 270, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 20, 620, 210);
    chart.setTitle(false);

    chart.getAxes().getVerticalAxis().setNumberFormatLinkedToSource(false);
    chart.getAxes().getVerticalAxis().setNumberFormat("0.00");
    chart.getAxes().getVerticalAxis().setAutomaticMinValue(false);
    chart.getAxes().getVerticalAxis().setMinValue(0);

    chart.getChartData().getSeries().clear();
    chart.getChartData().getCategories().clear();

    IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
    workbook.clear(0);

    IChartDataCell categoryCell = workbook.getCell(0, "A2", "Sample");
    chart.getChartData().getCategories().add(categoryCell);

    IChartDataCell percentageCell = workbook.getCell(0, "B2", 0.125);
    percentageCell.setCustomNumberFormat("0.0000%");
    IChartDataCell percentageName = workbook.getCell(0, "B1", "Conversion rate");
    IChartSeries percentageSeries = chart.getChartData().getSeries().add(percentageName, chart.getType());
    percentageSeries.getDataPoints().addDataPointForBarSeries(percentageCell);

    IChartDataCell precisionCell = workbook.getCell(0, "C2", 0.1234567);
    precisionCell.setCustomNumberFormat("0.00000");
    IChartDataCell precisionName = workbook.getCell(0, "C1", "Coefficient");
    IChartSeries precisionSeries = chart.getChartData().getSeries().add(precisionName, chart.getType());
    precisionSeries.getDataPoints().addDataPointForBarSeries(precisionCell);

    for (IChartSeries series : chart.getChartData().getSeries()) {
        IDataLabelFormat labelFormat = series.getDataPoints().get_Item(0).getLabel().getDataLabelFormat();
        labelFormat.setShowValue(true);
        labelFormat.setNumberFormatLinkedToSource(true);
    }

    presentation.save("CustomCellFormats.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Format sel buku kerja terpisah dari format yang diatur langsung pada sumbu bagan atau label data. Dalam contoh ini, setiap label menampilkan nilai sel sumber karena setShowValue diatur ke true, dan mengikuti format angka sumber karena setNumberFormatLinkedToSource diatur ke true. Setelah menyimpan dan membuka kembali presentasi, label menampilkan 12.5000% dan 0.12346, seperti yang ditunjukkan di bawah. Sumbu vertikal menggunakan format angka sendiri, ditetapkan dengan setNumberFormat sebagai 0.00, dengan setNumberFormatLinkedToSource diatur ke false.

Untuk memformat label data secara independen, setel flag tautan ke sumber menjadi false dan tetapkan format dengan setNumberFormat. Ini tidak mengubah format sel buku kerja. Misalnya, format label independen 0.00 menampilkan nilai pertama sebagai 0.13, sementara B2 tetap menampilkan 12.5000%. Lihat Label Data Bagan untuk format label langsung.

Gambar di bawah dihasilkan dari presentasi yang disimpan setelah dibuka kembali:

Bagan kolom dengan label terhubung ke sumber menampilkan 12.5000% dan 0.12346 serta sumbu numerik yang diformat secara independen.

Atur Sel Buku Kerja sebagai Label Data Bagan

Anda dapat menggunakan teks dari sel buku kerja sebagai label data bagan.

Contoh ini menambahkan bagan gelembung dengan data default ke slide pertama dari presentasi yang ada. Ia menggunakan sel A10:A12 pada lembar kerja 0 untuk tiga label pertama dalam seri pertama, mengaktifkan label dari sel, dan menyimpan presentasi yang telah diperbarui.

import com.aspose.slides.*;

Presentation presentation = new Presentation("chart2.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.Bubble, 50, 50, 600, 400, true);
    IChartSeries series = chart.getChartData().getSeries().get_Item(0);
    IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();

    series.getLabels().getDefaultDataLabelFormat().setShowLabelValueFromCell(true);
    series.getLabels().get_Item(0).setValueFromCell(workbook.getCell(0, "A10", "Label 0 cell value"));
    series.getLabels().get_Item(1).setValueFromCell(workbook.getCell(0, "A11", "Label 1 cell value"));
    series.getLabels().get_Item(2).setValueFromCell(workbook.getCell(0, "A12", "Label 2 cell value"));

    presentation.save("resultchart.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Kelola Lembar Kerja

Metode IChartDataWorkbook.getWorksheets menyediakan akses ke lembar kerja dalam buku kerja bagan. Contoh ini membuat bagan pai dengan data default dan mencetak nama setiap lembar kerja ke konsol.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 500);
    IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();

    for (int i = 0; i < workbook.getWorksheets().size(); i++) {
        System.out.println(workbook.getWorksheets().get_Item(i).getName());
    }
} finally {
    presentation.dispose();
}

Tentukan Tipe Sumber Data

Nilai titik seri juga dapat disimpan langsung sebagai literal numerik. Lihat Set Series Values Using Numeric Literals untuk contoh lengkap yang menyimpan dan membacanya. Tipe sumber nilai titik terpisah dari konfigurasi buku kerja internal atau eksternal bagan; penggunaan literal numerik tidak, dengan sendirinya, menghapus buku kerja tersemat.

Contoh ini membuat bagan kolom 3D dengan data default dan menetapkan dua nama seri menggunakan sumber data yang berbeda. Nama pertama menggunakan literal string; nama kedua menggunakan sel C1 pada lembar kerja 0. Enumerasi DataSourceType memilih sumber untuk setiap nama. Contoh menyimpan presentasi dengan nama seri yang diperbarui.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.Column3D, 50, 50, 600, 400, true);
    IStringChartValue literalName = chart.getChartData().getSeries().get_Item(0).getName();

    literalName.setDataSourceType(DataSourceType.StringLiterals);
    literalName.setData("LiteralString");

    IStringChartValue cellName = chart.getChartData().getSeries().get_Item(1).getName();
    IChartDataCell nameCell = chart.getChartData().getChartDataWorkbook().getCell(0, "C1", "NewCell");
    cellName.setDataSourceType(DataSourceType.Worksheet);
    cellName.setData(nameCell);

    presentation.save("pres.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Deteksi Format Buku Kerja Tersemat yang Tidak Didukung

Aspose.Slides tidak mendukung format buku kerja biner Excel (.xlsb) yang dapat tersemat dalam beberapa bagan. Anda dapat menggunakan metode getEmbeddedWorkbookType pada IChartData bersama dengan enumerasi WorkbookType untuk mendeteksi format yang tidak didukung dan melewatkan bagan‑bagan tersebut. Contoh ini memeriksa bentuk‑bentuk pada slide pertama dari presentasi yang ada, melewatkan bentuk non‑bagan, dan mencetak pesan diagnostik untuk setiap bagan dengan buku kerja .xlsb yang tersemat.

import com.aspose.slides.*;

Presentation presentation = new Presentation("sample.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    for (IShape shape : slide.getShapes()) {
        if (!(shape instanceof IChart)) {
            continue;
        }

        IChart chart = (IChart) shape;
        IChartData chartData = chart.getChartData();
        boolean isInternalWorkbook = chartData.getDataSourceType() == ChartDataSourceType.InternalWorkbook;
        boolean isBinaryMacro = chartData.getEmbeddedWorkbookType() == WorkbookType.WorkbookBinaryMacro;

        if (isInternalWorkbook && isBinaryMacro) {
            System.out.println("Skipping a chart with an unsupported .xlsb workbook.");
            continue;
        }

        // Baca atau ubah data buku kerja bagan yang didukung di sini.
    }
} finally {
    presentation.dispose();
}

Buku Kerja Eksternal

Aspose.Slides mendukung penggunaan buku kerja eksternal sebagai sumber data untuk bagan.

Buat Buku Kerja Eksternal

Gunakan readWorkbookStream dan setExternalWorkbook untuk mengekspor buku kerja bagan tersemat ke file dan menautkan bagan ke buku kerja eksternal tersebut.

Contoh ini membuat bagan pai dengan data default dan mengekspor buku kerjanya. Ia menyelesaikan penulisan file sebelum menetapkan buku kerja eksternal sebagai sumber data bagan, kemudian menyimpan presentasi yang ditautkan.

import com.aspose.slides.*;
import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600);
    File workbookFile = new File("externalWorkbook1.xlsx").getAbsoluteFile();
    byte[] workbookData = chart.getChartData().readWorkbookStream();
    try {
        try (FileOutputStream workbookStream = new FileOutputStream(workbookFile)) {
            workbookStream.write(workbookData);
        }
        chart.getChartData().setExternalWorkbook(workbookFile.getAbsolutePath());
        presentation.save("externalWorkbook.pptx", SaveFormat.Pptx);
    } catch (IOException exception) {
        System.out.println("Could not write the external workbook: " + exception.getMessage());
    }
} finally {
    presentation.dispose();
}

Tetapkan Buku Kerja Eksternal

Dengan menggunakan metode setExternalWorkbook, Anda dapat menetapkan buku kerja eksternal ke sebuah bagan sebagai sumber datanya. Metode ini juga dapat digunakan untuk memperbarui jalur ke buku kerja eksternal (jika buku kerja tersebut telah dipindahkan).

Meskipun Anda tidak dapat mengedit data dalam buku kerja yang disimpan di lokasi remote atau sumber daya, Anda masih dapat menggunakan buku kerja tersebut sebagai sumber data eksternal. Jika jalur relatif untuk buku kerja eksternal diberikan, jalur tersebut akan secara otomatis dikonversi menjadi jalur lengkap.

Contoh ini menggunakan buku kerja eksternal yang lembar kerjanya bernama Sheet1 berisi nama seri di B1, nama kategori di A2:A4, dan nilai numerik di B2:B4. Contoh membuat bagan pai, menautkan buku kerja, dan menggunakan setRange untuk memetakan A1:B4 ke satu seri dan tiga kategori. Ia menyimpan presentasi dengan bagan yang ditautkan.

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

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600, true);
    IChartData chartData = chart.getChartData();
    File workbookFile = new File("externalWorkbook.xlsx");
    String workbookPath = workbookFile.getAbsolutePath();

    chartData.setExternalWorkbook(workbookPath);
    chartData.setRange("Sheet1!$A$1:$B$4");

    presentation.save("Presentation_with_externalWorkbook.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Parameter updateChartData dari setExternalWorkbook mengontrol apakah buku kerja dimuat.

  • Ketika updateChartData bernilai false, hanya jalur buku kerja yang diperbarui. Data bagan tidak dimuat atau diperbarui dari buku kerja target, sehingga buku kerja dapat tidak tersedia.
  • Ketika updateChartData bernilai true, data bagan diperbarui dari buku kerja target.

Contoh berikut menetapkan URL placeholder dengan updateChartData diset ke false. Ia mempertahankan data default bagan pai dan menyimpan presentasi tanpa memuat buku kerja yang tidak tersedia.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600, true);
    chart.getChartData().setExternalWorkbook("https://example.com/unavailable-workbook.xlsx", false);

    presentation.save("SetExternalWorkbookWithUpdateChartData.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Dapatkan Jalur Buku Kerja Sumber Data Eksternal dari Sebuah Bagan

Untuk mengidentifikasi buku kerja yang terhubung ke sebuah bagan, periksa apakah bagan menggunakan sumber data eksternal dan ambil jalur bukunya.

Contoh ini memeriksa bentuk pertama pada slide pertama dari sebuah presentasi dengan buku kerja eksternal yang ditautkan. Jika itu adalah bagan yang terhubung ke buku kerja eksternal, contoh mencetak getExternalWorkbookPath ke konsol. Kemudian ia menyimpan salinan presentasi.

import com.aspose.slides.*;

Presentation presentation = new Presentation("externalWorkbook.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    if (slide.getShapes().size() > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
        IChart chart = (IChart) slide.getShapes().get_Item(0);
        IChartData chartData = chart.getChartData();
        if (chartData.getDataSourceType() == ChartDataSourceType.ExternalWorkbook) {
            System.out.println(chartData.getExternalWorkbookPath());
        } else {
            System.out.println("The chart does not use an external workbook.");
        }
    } else {
        System.out.println("The first shape is not a chart.");
    }

    presentation.save("Result.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Edit Data Bagan

Anda dapat mengedit data dalam buku kerja eksternal dengan cara yang sama seperti mengubah konten buku kerja internal. Ketika buku kerja eksternal tidak dapat dimuat, sebuah pengecualian akan dilempar.

Contoh ini menggunakan bagan yang merupakan bentuk pertama pada slide pertama dan terhubung ke buku kerja eksternal yang dapat diakses. Ia menetapkan nilai berbasis sel untuk titik data pertama dalam seri pertama menjadi 100 dan menyimpan presentasi yang diperbarui. Mengedit nilai sel dapat memperbarui file XLSX eksternal yang ditautkan, jadi gunakan salinan jika Anda perlu mempertahankan buku kerja asli.

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    int shapeCount = slide.getShapes().size();
    if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
        IChart chart = (IChart) slide.getShapes().get_Item(0);
        IChartSeriesCollection series = chart.getChartData().getSeries();
        if (series.size() > 0 && series.get_Item(0).getDataPoints().size() > 0) {
            IChartDataCell valueCell = series.get_Item(0).getDataPoints().get_Item(0).getValue().getAsCell();
            if (valueCell != null) {
                valueCell.setValue(100);
                presentation.save("presentation_out.pptx", SaveFormat.Pptx);
            } else {
                System.out.println("The first data point is not linked to a workbook cell.");
            }
        } else {
            System.out.println("The chart has no data points to edit.");
        }
    } else {
        System.out.println("The first shape is not a chart.");
    }
} finally {
    presentation.dispose();
}

Pulihkan Buku Kerja dari Cache Bagan

Jika sebuah bagan menggunakan buku kerja eksternal yang hilang atau tidak tersedia, Aspose.Slides dapat merekonstruksi buku kerja bagan dari data yang di‑cache dalam presentasi. Buat LoadOptions, panggil LoadOptions.setSpreadsheetOptions, dan setel ISpreadsheetOptions.setRecoverWorkbookFromChartCache ke true sebelum membuka presentasi.

Contoh Java berikut memulihkan data buku kerja untuk bagan yang merupakan bentuk pertama pada slide pertama dan merujuk ke buku kerja eksternal yang tidak tersedia. Ia mengakses data yang dipulihkan melalui IChart.getChartData dan IChartData.getChartDataWorkbook:

import com.aspose.slides.*;

SpreadsheetOptions spreadsheetOptions = new SpreadsheetOptions();
spreadsheetOptions.setRecoverWorkbookFromChartCache(true);

LoadOptions loadOptions = new LoadOptions();
loadOptions.setSpreadsheetOptions(spreadsheetOptions);

Presentation presentation = new Presentation("presentation.pptx", loadOptions);
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    int shapeCount = slide.getShapes().size();
    if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
        IChart chart = (IChart) slide.getShapes().get_Item(0);
        IChartDataWorkbook recoveredWorkbook = chart.getChartData().getChartDataWorkbook();

        // Baca atau ubah data buku kerja yang dipulihkan di sini.
    } else {
        System.out.println("The first shape is not a chart.");
    }
} finally {
    presentation.dispose();
}

Jika buku kerja eksternal tidak tersedia dan pemulihan dinonaktifkan, Aspose.Slides akan melempar pengecualian. Aktifkan pemulihan hanya ketika menggunakan data bagan yang di‑cache merupakan fallback yang dapat diterima, karena cache mungkin tidak berisi perubahan yang dibuat pada buku kerja eksternal setelah presentasi terakhir diperbarui.

FAQ

Apakah saya dapat menentukan apakah sebuah bagan tertentu terhubung ke buku kerja eksternal atau tersemat?

Ya. Sebuah bagan memiliki tipe sumber data dan jalur ke buku kerja eksternal; jika sumbernya adalah buku kerja eksternal, Anda dapat membaca jalur lengkap untuk memastikan file eksternal sedang digunakan.

Apakah jalur relatif ke buku kerja eksternal didukung, dan bagaimana cara penyimpanannya?

Ya. Jika Anda menentukan jalur relatif, jalur tersebut secara otomatis dikonversi menjadi jalur absolut. Presentasi menyimpan jalur absolut dalam file PPTX, sehingga memindahkan buku kerja mungkin memerlukan pembaruan tautan.

Apakah saya dapat menggunakan buku kerja yang terletak pada sumber daya atau berbagi jaringan?

Ya, buku kerja tersebut dapat digunakan sebagai sumber data eksternal. Namun, mengedit buku kerja remote secara langsung dari Aspose.Slides tidak didukung—mereka hanya dapat digunakan sebagai sumber.

Apakah Aspose.Slides menimpa XLSX eksternal saat menyimpan presentasi?

Presentasi menyimpan tautan ke file eksternal. Mengedit data bagan berbasis sel juga dapat memperbarui file XLSX lokal yang ditautkan. Gunakan salinan buku kerja jika yang asli harus tetap tidak berubah.

Apa yang harus saya lakukan jika file eksternal dilindungi kata sandi?

Aspose.Slides tidak menerima kata sandi saat menautkan. Pendekatan umum adalah menghapus perlindungan sebelumnya atau menyiapkan salinan yang telah didekripsi (misalnya, menggunakan Aspose.Cells) dan menautkan ke salinan tersebut.

Dapatkah beberapa bagan merujuk ke buku kerja eksternal yang sama?

Ya. Setiap bagan menyimpan tautannya sendiri. Jika semua bagan menunjuk ke file yang sama, memperbarui file tersebut akan tercermin di setiap bagan pada saat data berikutnya dimuat.