Kelola Buku Kerja Diagram dalam Presentasi Menggunakan PHP
Gambaran Umum
Artikel ini menjelaskan cara bekerja dengan buku kerja diagram di Aspose.Slides. Artikel ini menunjukkan cara membaca dan menulis data diagram melalui aliran buku kerja, menggunakan sel buku kerja sebagai label data diagram, mengakses koleksi lembar kerja, dan menentukan tipe sumber data untuk nilai diagram.
Artikel ini juga mencakup penggunaan buku kerja eksternal sebagai sumber data diagram. Contoh-contoh memperlihatkan cara membuat dan menetapkan buku kerja eksternal, mengambil jalur buku kerja eksternal yang terhubung ke diagram, dan mengedit data diagram ketika buku kerja tersedia.
Untuk sel buku kerja yang mewakili data yang hilang, lihat Kontrol Penampilan Sel Kosong untuk perbedaan antara sel kosong dan nol, serta perbandingan diagram garis dari mode tampilan yang tersedia.
Sertakan Data dari Baris dan Kolom Tersembunyi
Gunakan Chart::setPlotVisibleCellsOnly untuk mengontrol apakah diagram memplot data dari baris dan kolom lembar kerja yang tersembunyi. Atur ke true untuk memplot hanya sel yang terlihat, atau false untuk menyertakan sel yang terlihat dan tersembunyi. Pengaturan ini mengontrol pemetaan diagram; ia tidak menyembunyikan atau menampilkan kembali baris atau kolom lembar kerja.
Presentasi contoh berisi diagram kolom sebagai bentuk pertama pada slide pertama. Lembar kerja yang disematkan, 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: Ritel | C: Grosir (kolom tersembunyi) |
|---|---|---|---|
| 2 | Januari | 10 | 30 |
| 3 (baris tersembunyi) | Februari | 40 | 60 |
| 4 | Maret | 20 | 50 |
Akses sel sumber melalui ChartData::getChartDataWorkbook dan baca ChartDataCell::isHidden untuk memeriksa status tersembunyi mereka. Metode ini melaporkan status tersembunyi tanpa mengubahnya. Pada file ini, B2 terlihat, B3 termasuk dalam baris tersembunyi, dan C2 termasuk dalam kolom tersembunyi; contoh mencetak false, true, dan true masing‑masing.
Untuk contoh ini, segarkan data diagram setelah mengubah pengaturan pemetaan: pertahankan buku kerja yang disematkan dengan readWorkbookStream dan muat ulang dengan writeWorkbookStream. Saat menyertakan semua sel, gunakan juga setRange untuk memulihkan rentang lengkap, termasuk kategori Februari yang tersembunyi. Hanya mengubah flag tidak cukup untuk menyegarkan data diagram yang di‑cache dalam contoh ini serta label kategori.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("hidden-source-data.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$workbook = $chart->getChartData()->getChartDataWorkbook();
echo "B2 hidden: " . (java_values($workbook->getCell(0, "B2")->isHidden()) ? "true" : "false"), PHP_EOL;
echo "B3 hidden: " . (java_values($workbook->getCell(0, "B3")->isHidden()) ? "true" : "false"), PHP_EOL;
echo "C2 hidden: " . (java_values($workbook->getCell(0, "C2")->isHidden()) ? "true" : "false"), PHP_EOL;
$workbookData = $chart->getChartData()->readWorkbookStream();
foreach ([true, false] as $visibleOnly) {
$chart->setPlotVisibleCellsOnly($visibleOnly);
// Segarkan data diagram dari buku kerja yang disematkan.
$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 ? "true" : "false") . ".pptx", SaveFormat::Pptx);
}
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
Contoh ini menyimpan dua versi presentasi: satu hanya dengan nilai Ritel 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 di kedua buku kerja yang disematkan.
Hanya sel terlihat (true) |
Semua sel (false) |
|---|---|
![]() |
![]() |
Sel tersembunyi yang berisi nilai berbeda dari sel kosong. Chart::setDisplayBlanksAs mengontrol bagaimana nilai yang hilang ditampilkan; ia tidak menyertakan atau mengecualikan data sumber yang tersembunyi. Lihat Kontrol Penampilan Sel Kosong untuk contoh.
Ambil Rentang Data Diagram
Sebelum memperbarui data buku kerja dalam presentasi yang sudah ada, periksa rentang sumber untuk mengidentifikasi sel lembar kerja mana yang digunakan setiap diagram. Metode ChartData::getRange mengembalikan rentang data saat ini sebagai rumus 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 hingga D5, inklusif. Tanda dolar menunjukkan referensi baris dan kolom absolut.
Metode ini membaca rentang saat ini tanpa mengubah diagram atau buku kerjanya. Jika diagram tidak menggunakan buku kerja sebagai sumber data, metode ini akan melempar pengecualian. Untuk informasi lebih lanjut, lihat Referensi API ChartData.
Contoh ini membuka sebuah presentasi dan memeriksa bentuk‑bentuk langsung pada setiap slide untuk diagram. Ia mencetak nama setiap diagram dan rentang sumbernya. Jika sebuah diagram tidak menggunakan buku kerja, ia mencetak pesan dan melanjutkan ke diagram berikutnya.
use aspose\slides\Presentation;
$presentation = new Presentation("presentation.pptx");
try {
$slideCount = java_values($presentation->getSlides()->size());
for ($slideIndex = 0; $slideIndex < $slideCount; $slideIndex++) {
$slide = $presentation->getSlides()->get_Item($slideIndex);
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (java_instanceof($shape, new JavaClass("com.aspose.slides.IChart"))) {
$chart = $shape;
try {
$range = $chart->getChartData()->getRange();
echo $chart->getName() . ": " . $range, PHP_EOL;
} catch (JavaException $exception) {
if (java_instanceof($exception, new JavaClass("com.aspose.slides.exceptions.InvalidOperationException"))) {
echo $chart->getName() . ": The chart does not use a workbook as its data source.", PHP_EOL;
} else {
echo $chart->getName() . ": " . $exception->getMessage(), PHP_EOL;
}
}
}
}
}
} finally {
$presentation->dispose();
}
Baca dan Tulis Data Diagram dari Buku Kerja
Aspose.Slides untuk PHP via Java menyediakan metode readWorkbookStream dan writeWorkbookStream yang memungkinkan Anda membaca dan menulis buku kerja data diagram (yang berisi data diagram yang diedit dengan Aspose.Cells). Catatan bahwa data diagram harus diatur dengan cara yang sama atau memiliki struktur serupa dengan sumbernya.
Contoh ini menggunakan sebuah presentasi dengan diagram sebagai bentuk pertama pada slide pertama. Ia membaca buku kerja yang disematkan ke dalam array byte, menghapus seri dan kategori yang ada, dan menulis kembali buku kerja yang sama. Perubahan tetap berada di memori; contoh ini tidak menyimpan presentasi.
use aspose\slides\Presentation;
$presentation = new Presentation("chart.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$chartData = $chart->getChartData();
$workbookData = $chartData->readWorkbookStream();
$chartData->getSeries()->clear();
$chartData->getCategories()->clear();
$chartData->writeWorkbookStream($workbookData);
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
Validasi Tata Letak Diagram Setelah Modifikasi Buku Kerja
Saat Anda mengganti buku kerja yang disematkan dengan yang telah dimodifikasi, diagram tetap mempertahankan koleksi seri dan kategori aslinya. Ketidaksesuaian ini dapat menyebabkan Chart::validateChartLayout gagal dengan kesalahan indeks di luar jangkauan. Bersihkan seri dan kategori yang ada sebelum menulis kembali buku kerja yang diperbarui ke diagram. Contoh ini menggunakan diagram yang merupakan bentuk pertama pada slide pertama. Komentar menandai tempat pengeditan buku kerja akan terjadi; contoh yang dapat dijalankan menulis kembali buku kerja asli dan memvalidasi tata letak di memori.
use aspose\slides\Presentation;
$presentation = new Presentation("chart.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$chartData = $chart->getChartData();
$workbookData = $chartData->readWorkbookStream();
// Ubah byte buku kerja di sini, misalnya menggunakan Aspose.Cells.
$chartData->getSeries()->clear();
$chartData->getCategories()->clear();
$chartData->writeWorkbookStream($workbookData);
$chart->validateChartLayout();
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
Membersihkan koleksi menghapus referensi data usang sebelum buku kerja ditulis kembali. Bangun kembali semua pemetaan seri dan kategori yang diperlukan untuk buku kerja yang diperbarui sebelum menggunakan diagram.
Tetapkan Format Angka Kustom untuk Sel Buku Kerja
Gunakan ChartDataCell::setCustomNumberFormat untuk mengontrol bagaimana nilai numerik muncul dalam buku kerja diagram yang disematkan. Misalnya, sebuah laporan mungkin memerlukan tingkat konversi yang ditampilkan sebagai persentase dengan empat tempat desimal dan koefisien yang ditampilkan dengan lima tempat desimal. Pertahankan kedua nilai tetap numerik agar tetap tersedia untuk perhitungan dan pemetaan diagram.
Format angka mengubah tampilan, bukan nilai yang disimpan. Format 0.0000% menampilkan 0.125 sebagai 12.5000%; ia tidak mengganti 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.
Contoh berikut membuat diagram kolom dan mengakses sel‑nya melalui getChartDataWorkbook. Pada lembar kerja 0, B2 berisi tingkat konversi dan C2 berisi koefisien. Kedua sel menyediakan nilai diagram. Contoh ini juga mengaktifkan label nilai yang terhubung ke format sumber.
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SlideSizeScaleType;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$presentation->getSlideSize()->setSize(720, 270, SlideSizeScaleType::DoNotScale);
$slide = $presentation->getSlides()->get_Item(0);
$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();
$workbook = $chart->getChartData()->getChartDataWorkbook();
$workbook->clear(0);
$categoryCell = $workbook->getCell(0, "A2", "Sample");
$chart->getChartData()->getCategories()->add($categoryCell);
$percentageCell = $workbook->getCell(0, "B2", 0.125);
$percentageCell->setCustomNumberFormat("0.0000%");
$percentageName = $workbook->getCell(0, "B1", "Conversion rate");
$percentageSeries = $chart->getChartData()->getSeries()->add($percentageName, $chart->getType());
$percentageSeries->getDataPoints()->addDataPointForBarSeries($percentageCell);
$precisionCell = $workbook->getCell(0, "C2", 0.1234567);
$precisionCell->setCustomNumberFormat("0.00000");
$precisionName = $workbook->getCell(0, "C1", "Coefficient");
$precisionSeries = $chart->getChartData()->getSeries()->add($precisionName, $chart->getType());
$precisionSeries->getDataPoints()->addDataPointForBarSeries($precisionCell);
for ($seriesIndex = 0; $seriesIndex < java_values($chart->getChartData()->getSeries()->size()); $seriesIndex++) {
$series = $chart->getChartData()->getSeries()->get_Item($seriesIndex);
$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 ditetapkan langsung pada sumbu diagram atau label data. Dalam contoh ini, setiap label menampilkan nilai sel sumbernya 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, yang ditetapkan dengan setNumberFormat sebagai 0.00, dengan setNumberFormatLinkedToSource diatur ke false.
Untuk memformat label data secara independen, atur flag tautan‑sumbernya ke false dan tetapkan format dengan setNumberFormat. Hal 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 Diagram untuk pemformatan label langsung.
Gambar di bawah dihasilkan dari presentasi yang disimpan setelah dibuka kembali:

Tetapkan Sel Buku Kerja Sebagai Label Data Diagram
Anda dapat menggunakan teks dari sel buku kerja sebagai label data diagram.
Contoh ini menambahkan diagram gelembung dengan data default ke slide pertama dari sebuah presentasi yang sudah ada. Ia menggunakan sel A10:A12 pada lembar kerja 0 untuk tiga label pertama pada seri pertama, mengaktifkan label dari sel, dan menyimpan presentasi yang diperbarui.
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation("chart2.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Bubble, 50, 50, 600, 400, true);
$series = $chart->getChartData()->getSeries()->get_Item(0);
$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 ChartDataWorkbook::getWorksheets menyediakan akses ke lembar kerja dalam buku kerja diagram. Contoh ini membuat diagram lingkaran dengan data default dan mencetak setiap nama lembar kerja ke konsol.
use aspose\slides\Presentation;
use aspose\slides\ChartType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 500);
$workbook = $chart->getChartData()->getChartDataWorkbook();
for ($i = 0; $i < java_values($workbook->getWorksheets()->size()); $i++) {
echo $workbook->getWorksheets()->get_Item($i)->getName(), PHP_EOL;
}
} finally {
$presentation->dispose();
}
Tentukan Tipe Sumber Data
Nilai titik seri juga dapat disimpan langsung sebagai literal numerik. Lihat Atur Nilai Seri Menggunakan Literal Numerik untuk contoh lengkap yang menyimpan dan membacanya. Tipe sumber nilai titik terpisah dari konfigurasi buku kerja internal atau eksternal diagram; penggunaan literal numerik tidak, dengan sendirinya, menghapus buku kerja yang disematkan.
Contoh ini membuat diagram kolom 3D dengan data default dan menetapkan dua nama seri menggunakan sumber data yang berbeda. Nama pertama menggunakan literal string; yang kedua menggunakan sel C1 pada lembar kerja 0. Enumerasi DataSourceType memilih sumber untuk setiap nama. Contoh ini menyimpan presentasi dengan nama seri yang diperbarui.
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
use aspose\slides\DataSourceType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Column3D, 50, 50, 600, 400, true);
$literalName = $chart->getChartData()->getSeries()->get_Item(0)->getName();
$literalName->setDataSourceType(DataSourceType::StringLiterals);
$literalName->setData("LiteralString");
$cellName = $chart->getChartData()->getSeries()->get_Item(1)->getName();
$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 Tersematkan yang Tidak Didukung
Aspose.Slides tidak mendukung format buku kerja Excel biner (.xlsb) yang dapat disematkan pada beberapa diagram. Anda dapat menggunakan metode getEmbeddedWorkbookType pada ChartData bersama enumerasi WorkbookType untuk mendeteksi format yang tidak didukung dan melewatkan diagram‑diagram tersebut. Contoh ini memeriksa bentuk‑bentuk pada slide pertama dari sebuah presentasi yang sudah ada, melewatkan bentuk yang bukan diagram, dan mencetak pesan diagnostik untuk setiap diagram dengan buku kerja .xlsb yang disematkan.
use aspose\slides\Presentation;
use aspose\slides\ChartDataSourceType;
use aspose\slides\WorkbookType;
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (!java_instanceof($shape, new JavaClass("com.aspose.slides.IChart"))) {
continue;
}
$chart = $shape;
$chartData = $chart->getChartData();
$isInternalWorkbook = java_values($chartData->getDataSourceType()) == ChartDataSourceType::InternalWorkbook;
$isBinaryMacro = java_values($chartData->getEmbeddedWorkbookType()) == WorkbookType::WorkbookBinaryMacro;
if ($isInternalWorkbook && $isBinaryMacro) {
echo "Skipping a chart with an unsupported .xlsb workbook.", PHP_EOL;
continue;
}
// Baca atau ubah data buku kerja diagram yang didukung di sini.
}
} finally {
$presentation->dispose();
}
Buku Kerja Eksternal
Aspose.Slides mendukung penggunaan buku kerja eksternal sebagai sumber data untuk diagram.
Buat Buku Kerja Eksternal
Gunakan readWorkbookStream dan setExternalWorkbook untuk mengekspor buku kerja diagram yang disematkan ke sebuah berkas dan menautkan diagram ke buku kerja eksternal tersebut.
Contoh ini membuat diagram lingkaran dengan data default dan mengekspor buku kerjanya. Ia menyelesaikan penulisan berkas sebelum menetapkan buku kerja eksternal sebagai sumber data diagram, kemudian menyimpan presentasi yang ditautkan.
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600);
$workbookPath = new Java("java.io.File", "externalWorkbook1.xlsx");
$workbookData = $chart->getChartData()->readWorkbookStream();
try {
$fileStream = new Java("java.io.FileOutputStream", $workbookPath);
try {
$fileStream->write($workbookData);
} finally {
$fileStream->close();
}
$chart->getChartData()->setExternalWorkbook($workbookPath->getAbsolutePath());
$presentation->save("externalWorkbook.pptx", SaveFormat::Pptx);
} catch (JavaException $exception) {
echo "Could not write the external workbook: " . $exception->getMessage(), PHP_EOL;
}
} finally {
$presentation->dispose();
}
Tetapkan Buku Kerja Eksternal
Dengan menggunakan metode setExternalWorkbook, Anda dapat menetapkan buku kerja eksternal ke sebuah diagram 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 menyunting data pada 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 secara otomatis dikonversi ke jalur penuh.
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 ini membuat diagram lingkaran, menautkan buku kerja, dan menggunakan setRange untuk memetakan A1:B4 ke satu seri dan tiga kategori. Ia menyimpan presentasi dengan diagram yang ditautkan.
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600, true);
$chartData = $chart->getChartData();
$workbookFile = new Java("java.io.File", "externalWorkbook.xlsx");
$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 pada metode setExternalWorkbook mengontrol apakah buku kerja dimuat.
- Ketika
updateChartDatabernilaifalse, hanya jalur buku kerja yang diperbarui. Data diagram tidak dimuat atau diperbarui dari buku kerja target, sehingga buku kerja dapat tidak tersedia. - Ketika
updateChartDatabernilaitrue, data diagram diperbarui dari buku kerja target.
Contoh berikut menetapkan URL placeholder dengan updateChartData diatur ke false. Ia mempertahankan data default diagram lingkaran dan menyimpan presentasi tanpa memuat buku kerja yang tidak tersedia.
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$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 Diagram
Untuk mengidentifikasi buku kerja yang ditautkan ke sebuah diagram, periksa apakah diagram 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 bentuk tersebut merupakan diagram yang ditautkan ke buku kerja eksternal, contoh ini mencetak getExternalWorkbookPath ke konsol. Kemudian ia menyimpan salinan presentasi.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ChartDataSourceType;
$presentation = new Presentation("externalWorkbook.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$chartData = $chart->getChartData();
if (java_values($chartData->getDataSourceType()) == ChartDataSourceType::ExternalWorkbook) {
echo $chartData->getExternalWorkbookPath(), PHP_EOL;
} else {
echo "The chart does not use an external workbook.", PHP_EOL;
}
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
$presentation->save("Result.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Sunting Data Diagram
Anda dapat menyunting data dalam buku kerja eksternal dengan cara yang sama seperti mengubah isi buku kerja internal. Ketika buku kerja eksternal tidak dapat dimuat, pengecualian akan dilempar.
Contoh ini menggunakan diagram yang merupakan bentuk pertama pada slide pertama dan ditautkan ke buku kerja eksternal yang dapat diakses. Ia menetapkan nilai berbasis sel untuk titik data pertama pada seri pertama menjadi 100 dan menyimpan presentasi yang diperbarui. Menyunting nilai sel dapat memperbarui berkas XLSX eksternal yang ditautkan, sehingga gunakan salinan jika Anda perlu mempertahankan buku kerja asli.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$series = $chart->getChartData()->getSeries();
if (java_values($series->size()) > 0 && java_values($series->get_Item(0)->getDataPoints()->size()) > 0) {
$valueCell = $series->get_Item(0)->getDataPoints()->get_Item(0)->getValue()->getAsCell();
if (!java_is_null($valueCell)) {
$valueCell->setValue(100);
$presentation->save("presentation_out.pptx", SaveFormat::Pptx);
} else {
echo "The first data point is not linked to a workbook cell.", PHP_EOL;
}
} else {
echo "The chart has no data points to edit.", PHP_EOL;
}
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
Pulihkan Buku Kerja dari Cache Diagram
Jika sebuah diagram menggunakan buku kerja eksternal yang hilang atau tidak tersedia, Aspose.Slides dapat membangun kembali buku kerja diagram dari data yang di‑cache dalam presentasi. Buat LoadOptions, panggil LoadOptions::setSpreadsheetOptions, dan atur SpreadsheetOptions::setRecoverWorkbookFromChartCache ke true sebelum membuka presentasi.
Contoh PHP berikut memulihkan data buku kerja untuk diagram yang merupakan bentuk pertama pada slide pertama dan merujuk ke buku kerja eksternal yang tidak tersedia. Ia mengakses data yang dipulihkan melalui Chart::getChartData dan ChartData::getChartDataWorkbook:
use aspose\slides\Presentation;
use aspose\slides\SpreadsheetOptions;
use aspose\slides\LoadOptions;
$spreadsheetOptions = new SpreadsheetOptions();
$spreadsheetOptions->setRecoverWorkbookFromChartCache(true);
$loadOptions = new LoadOptions();
$loadOptions->setSpreadsheetOptions($spreadsheetOptions);
$presentation = new Presentation("presentation.pptx", $loadOptions);
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$recoveredWorkbook = $chart->getChartData()->getChartDataWorkbook();
// Baca atau ubah data buku kerja yang dipulihkan di sini.
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
Jika buku kerja eksternal tidak tersedia dan pemulihan dinonaktifkan, Aspose.Slides akan melempar pengecualian. Aktifkan pemulihan hanya ketika penggunaan data diagram yang di‑cache merupakan alternatif 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 diagram tertentu ditautkan ke buku kerja eksternal atau yang disematkan?
Ya. Sebuah diagram 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 ke jalur absolut. Presentasi menyimpan jalur absolut dalam berkas PPTX, sehingga memindahkan buku kerja mungkin memerlukan pembaruan tautan.
Dapatkah saya menggunakan buku kerja yang terletak pada sumber daya/jaringan bersama?
Ya, buku kerja semacam itu dapat digunakan sebagai sumber data eksternal. Namun, penyuntingan buku kerja remote secara langsung dari Aspose.Slides tidak didukung — mereka hanya dapat digunakan sebagai sumber.
Apakah Aspose.Slides menimpa file XLSX eksternal saat menyimpan presentasi?
Presentasi menyimpan tautan ke file eksternal. Penyuntingan data diagram yang berbasis sel juga dapat memperbarui file XLSX lokal yang ditautkan. Gunakan salinan buku kerja jika asli harus tetap tidak berubah.
Apa yang harus saya lakukan jika file eksternal dilindungi sandi?
Aspose.Slides tidak menerima sandi saat menautkan. Pendekatan umum adalah menghilangkan perlindungan sebelumnya atau menyiapkan salinan yang sudah didekripsi (misalnya, menggunakan Aspose.Cells) dan menautkan ke salinan tersebut.
Dapatkah beberapa diagram merujuk ke buku kerja eksternal yang sama?
Ya. Setiap diagram menyimpan tautannya masing‑masing. Jika semuanya menunjuk ke file yang sama, memperbarui file tersebut akan tercermin pada setiap diagram pada pemuatan data berikutnya.

