Kelola Workbook Diagram dalam Presentasi Menggunakan JavaScript
Ringkasan
Artikel ini menjelaskan cara bekerja dengan workbook diagram di Aspose.Slides. Artikel ini menunjukkan cara membaca dan menulis data diagram melalui aliran workbook, menggunakan sel workbook sebagai label data diagram, mengakses koleksi worksheet, dan menentukan tipe sumber data untuk nilai diagram.
Artikel ini juga membahas cara bekerja dengan workbook eksternal sebagai sumber data diagram. Contoh-contoh menunjukkan cara membuat dan menugaskan workbook eksternal, mengambil jalur workbook eksternal yang terhubung ke diagram, dan mengedit data diagram ketika workbook tersedia.
Baca dan Tulis Data Diagram dari Workbook
Aspose.Slides menyediakan metode readWorkbookStream dan writeWorkbookStream yang memungkinkan Anda membaca dan menulis workbook data diagram (yang berisi data diagram yang diedit dengan Aspose.Cells). Catatan bahwa data diagram harus diatur dengan cara yang sama atau harus memiliki struktur yang mirip dengan sumbernya.
Kode JavaScript ini memperlihatkan contoh operasi:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var pres = new aspose.slides.Presentation("chart.pptx");
try {
var chart = pres.getSlides().get_Item(0).getShapes().get_Item(0);
var data = chart.getChartData();
var stream = data.readWorkbookStream();
data.getSeries().clear();
data.getCategories().clear();
data.writeWorkbookStream(stream);
} finally {
if (pres != null) {
pres.dispose();
}
}
Validasi Tata Letak Diagram Setelah Modifikasi Workbook
Ketika Anda mengganti workbook tertanam 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. Hapus seri dan kategori yang ada sebelum menulis kembali workbook yang diperbarui ke diagram.
// Setelah memodifikasi aliran workbook (mis., menggunakan Aspose.Cells)
var updatedWorkbook = chartData.readWorkbookStream();
// Hapus referensi data yang ada.
chartData.getSeries().clear();
chartData.getCategories().clear();
chartData.writeWorkbookStream(updatedWorkbook);
chart.validateChartLayout();
Mengosongkan koleksi memastikan struktur data diagram konsisten dengan workbook baru, sehingga validateChartLayout dapat selesai tanpa kesalahan.
Tetapkan Sel Workbook sebagai DataLabel Diagram
- Buat instance kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Tambahkan diagram Bubble dengan beberapa data.
- Akses seri diagram.
- Tetapkan sel workbook sebagai label data.
- Simpan presentasi.
Kode JavaScript ini menunjukkan cara menetapkan sel workbook sebagai label data diagram:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var lbl0 = "Label 0 cell value";
var lbl1 = "Label 1 cell value";
var lbl2 = "Label 2 cell value";
// Membuat instance kelas presentasi yang mewakili file presentasi
var pres = new aspose.slides.Presentation("chart2.pptx");
try {
var slide = pres.getSlides().get_Item(0);
var chart = slide.getShapes().addChart(aspose.slides.ChartType.Bubble, 50, 50, 600, 400, true);
var series = chart.getChartData().getSeries();
var dataLabelCollection = series.get_Item(0).getLabels();
dataLabelCollection.getDefaultDataLabelFormat().setShowLabelValueFromCell(true);
var wb = chart.getChartData().getChartDataWorkbook();
dataLabelCollection.get_Item(0).setValueFromCell(wb.getCell(0, "A10", lbl0));
dataLabelCollection.get_Item(1).setValueFromCell(wb.getCell(0, "A11", lbl1));
dataLabelCollection.get_Item(2).setValueFromCell(wb.getCell(0, "A12", lbl2));
pres.save("resultchart.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Kelola Worksheet
Kode JavaScript ini memperlihatkan operasi di mana metode ChartDataWorkbook.getWorksheets digunakan untuk mengakses koleksi worksheet:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var pres = new aspose.slides.Presentation();
try {
var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 500);
var wb = chart.getChartData().getChartDataWorkbook();
for (var i = 0; i < wb.getWorksheets().size(); i++) {
console.log(wb.getWorksheets().get_Item(i).getName());
}
} finally {
if (pres != null) {
pres.dispose();
}
}
Tentukan Tipe Sumber Data
Kode JavaScript ini menunjukkan cara menentukan tipe untuk sumber data:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var pres = new aspose.slides.Presentation();
try {
var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Column3D, 50, 50, 600, 400, true);
var val = chart.getChartData().getSeries().get_Item(0).getName();
val.setDataSourceType(aspose.slides.DataSourceType.StringLiterals);
val.setData("LiteralString");
val = chart.getChartData().getSeries().get_Item(1).getName();
val.setData(chart.getChartData().getChartDataWorkbook().getCell(0, "B1", "NewCell"));
pres.save("pres.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Deteksi Format Workbook Tertanam yang Tidak Didukung
Aspose.Slides tidak mendukung format workbook Excel biner (.xlsb) yang dapat tertanam di beberapa diagram. Anda dapat menggunakan metode getEmbeddedWorkbookType pada ChartData bersama dengan enumerasi WorkbookType untuk mendeteksi format yang tidak didukung dan melewati diagram‑diagram tersebut.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shapes = slide.getShapes();
for (let shapeIndex = 0; shapeIndex < shapes.size(); shapeIndex++) {
let shape = shapes.get_Item(shapeIndex);
if (!java.instanceOf(shape, "com.aspose.slides.IChart")) continue;
let chart = shape;
let chartData = chart.getChartData();
if (chartData.getDataSourceType() == aspose.slides.ChartDataSourceType.InternalWorkbook &&
chartData.getEmbeddedWorkbookType() == aspose.slides.WorkbookType.WorkbookBinaryMacro) {
// Workbook tertanam berformat .xlsb, yang tidak didukung.
continue;
}
// Baca atau ubah data workbook diagram di sini.
}
} finally {
presentation.dispose();
}
Workbook Eksternal
Aspose.Slides mendukung workbook eksternal sebagai sumber data untuk diagram.
Buat Workbook Eksternal
Dengan menggunakan metode readWorkbookStream dan setExternalWorkbook, Anda dapat membuat workbook eksternal dari awal atau menjadikan workbook internal menjadi eksternal.
Kode JavaScript ini memperlihatkan proses pembuatan workbook eksternal:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const fileSystem = require("fs");
var pres = new aspose.slides.Presentation();
try {
var workbookPath = "externalWorkbook1.xlsx";
var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 600);
// readWorkbookStream mengembalikan byte workbook sebagai Buffer Node.
var workbookData = chart.getChartData().readWorkbookStream();
fileSystem.writeFileSync(workbookPath, Buffer.from(workbookData));
chart.getChartData().setExternalWorkbook(workbookPath);
pres.save("externalWorkbook.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
Tetapkan Workbook Eksternal
Dengan menggunakan metode setExternalWorkbook, Anda dapat menugaskan workbook eksternal ke sebuah diagram sebagai sumber datanya. Metode ini juga dapat digunakan untuk memperbarui jalur ke workbook eksternal (jika workbook tersebut telah dipindahkan).
Meskipun Anda tidak dapat mengedit data di workbook yang disimpan di lokasi atau sumber daya jarak jauh, Anda tetap dapat menggunakan workbook tersebut sebagai sumber data eksternal. Jika jalur relatif untuk workbook eksternal disediakan, jalur tersebut secara otomatis diubah menjadi jalur lengkap.
Kode JavaScript ini menunjukkan cara menetapkan workbook eksternal:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
// Membuat instance kelas Presentation
var pres = new aspose.slides.Presentation("chart.pptx");
try {
var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 600, false);
var chartData = chart.getChartData();
chartData.setExternalWorkbook("externalWorkbook.xlsx");
chartData.getSeries().add(chartData.getChartDataWorkbook().getCell(0, "B1"), aspose.slides.ChartType.Pie);
chartData.getSeries().get_Item(0).getDataPoints().addDataPointForPieSeries(chartData.getChartDataWorkbook().getCell(0, "B2"));
chartData.getSeries().get_Item(0).getDataPoints().addDataPointForPieSeries(chartData.getChartDataWorkbook().getCell(0, "B3"));
chartData.getSeries().get_Item(0).getDataPoints().addDataPointForPieSeries(chartData.getChartDataWorkbook().getCell(0, "B4"));
chartData.getCategories().add(chartData.getChartDataWorkbook().getCell(0, "A2"));
chartData.getCategories().add(chartData.getChartDataWorkbook().getCell(0, "A3"));
chartData.getCategories().add(chartData.getChartDataWorkbook().getCell(0, "A4"));
pres.save("Presentation_with_externalWorkbook.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Parameter kedua dari metode setExternalWorkbook, updateChartData, menentukan apakah workbook Excel akan dimuat atau tidak.
- Ketika
updateChartDatadiatur kefalse, hanya jalur workbook yang diperbarui — data diagram tidak akan dimuat atau diperbarui dari workbook target. Gunakan pengaturan ini ketika workbook target tidak ada atau tidak dapat diakses. - Ketika
updateChartDatadiatur ketrue, data diagram diperbarui dari workbook target.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
// Membuat instance kelas Presentation
var pres = new aspose.slides.Presentation("chart.pptx");
try {
var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 600, true);
var chartData = chart.getChartData();
chartData.setExternalWorkbook("http://path/doesnt/exists", false);
pres.save("Presentation_with_externalWorkbookWithUpdateChartData.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Dapatkan Jalur Workbook Sumber Data Eksternal Diagram
- Buat instance kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Buat objek untuk bentuk diagram.
- Buat objek untuk tipe sumber (
ChartDataSourceType) yang mewakili sumber data diagram. - Tentukan kondisi yang relevan berdasarkan tipe sumber yang sama dengan tipe sumber data workbook eksternal.
Kode JavaScript ini memperlihatkan operasi tersebut:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
// Membuat instance kelas Presentation
var pres = new aspose.slides.Presentation("chart.pptx");
try {
var slide = pres.getSlides().get_Item(1);
var chart = slide.getShapes().get_Item(0);
var sourceType = chart.getChartData().getDataSourceType();
if (sourceType == aspose.slides.ChartDataSourceType.ExternalWorkbook) {
var path = chart.getChartData().getExternalWorkbookPath();
}
// Menyimpan presentasi
pres.save("result.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Edit Data Diagram
Anda dapat mengedit data di workbook eksternal dengan cara yang sama seperti mengubah isi workbook internal. Ketika workbook eksternal tidak dapat dimuat, sebuah pengecualian akan dilempar.
Kode JavaScript ini merupakan implementasi proses yang dijelaskan:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
// Membuat instance kelas Presentation
var pres = new aspose.slides.Presentation("chart.pptx");
try {
var chart = pres.getSlides().get_Item(0).getShapes().get_Item(0);
var chartData = chart.getChartData();
chartData.getSeries().get_Item(0).getDataPoints().get_Item(0).getValue().getAsCell().setValue(100);
pres.save("presentation_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Pulihkan Workbook dari Cache Diagram
Jika sebuah diagram menggunakan workbook eksternal yang hilang atau tidak tersedia, Aspose.Slides dapat membangun kembali workbook diagram dari data yang di‑cache di dalam presentasi. Buat objek LoadOptions, konfigurasikan dengan SpreadsheetOptions, dan panggil SpreadsheetOptions.setRecoverWorkbookFromChartCache dengan nilai true sebelum membuka presentasi.
Contoh JavaScript berikut membuka presentasi yang diagramnya merujuk ke workbook eksternal yang tidak tersedia dan mengakses data yang dipulihkan melalui ChartData.getChartDataWorkbook:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const spreadsheetOptions = new aspose.slides.SpreadsheetOptions();
spreadsheetOptions.setRecoverWorkbookFromChartCache(true);
const loadOptions = new aspose.slides.LoadOptions();
loadOptions.setSpreadsheetOptions(spreadsheetOptions);
const presentation = new aspose.slides.Presentation("presentation.pptx", loadOptions);
try {
const chart = presentation.getSlides().get_Item(0).getShapes().get_Item(0);
const recoveredWorkbook = chart.getChartData().getChartDataWorkbook();
// Baca atau ubah data workbook yang dipulihkan di sini.
} finally {
presentation.dispose();
}
Jika workbook eksternal tidak tersedia dan pemulihan dinonaktifkan, Aspose.Slides akan melempar pengecualian. Aktifkan pemulihan hanya ketika penggunaan data diagram yang di‑cache dapat diterima sebagai alternatif, karena cache mungkin tidak berisi perubahan yang dibuat pada workbook eksternal setelah presentasi terakhir diperbarui.
FAQ
Apakah saya dapat menentukan apakah sebuah diagram terhubung ke workbook eksternal atau tertanam?
Ya. Sebuah diagram memiliki tipe sumber data dan jalur ke workbook eksternal; jika sumbernya adalah workbook eksternal, Anda dapat membaca jalur lengkap untuk memastikan file eksternal sedang digunakan.
Apakah jalur relatif ke workbook eksternal didukung, dan bagaimana cara penyimpanannya?
Ya. Jika Anda menentukan jalur relatif, jalur tersebut secara otomatis diubah menjadi jalur absolut. Hal ini memudahkan portabilitas proyek; namun, presentasi akan menyimpan jalur absolut di dalam file PPTX.
Bisakah saya menggunakan workbook yang terletak pada sumber daya/jaringan bersama?
Ya, workbook tersebut dapat digunakan sebagai sumber data eksternal. Namun, pengeditan workbook jarak jauh secara langsung dari Aspose.Slides tidak didukung — hanya dapat digunakan sebagai sumber.
Apakah Aspose.Slides menimpa file XLSX eksternal saat menyimpan presentasi?
Tidak. Presentasi menyimpan sebuah tautan ke file eksternal dan menggunakan tautan tersebut untuk membaca data. File eksternal itu sendiri tidak diubah saat presentasi disimpan.
Apa yang harus saya lakukan jika file eksternal dilindungi kata sandi?
Aspose.Slides tidak menerima kata sandi saat melakukan penautan. Pendekatan umum adalah menghapus proteksi terlebih dahulu atau menyiapkan salinan yang telah didekripsi (misalnya dengan menggunakan Aspose.Cells) dan menautkan ke salinan tersebut.
Apakah beberapa diagram dapat merujuk ke workbook eksternal yang sama?
Ya. Setiap diagram menyimpan tautannya masing‑masing. Jika semua diagram merujuk ke file yang sama, memperbarui file tersebut akan tercermin di setiap diagram pada kali berikutnya data dimuat.