Kelola Buku Kerja Grafik dalam Presentasi Menggunakan Java
Gambaran Umum
Artikel ini menjelaskan cara bekerja dengan buku kerja grafik di Aspose.Slides. Artikel ini menunjukkan cara membaca dan menulis data grafik melalui aliran buku kerja, menggunakan sel buku kerja sebagai label data grafik, mengakses koleksi lembar kerja, dan menentukan tipe sumber data untuk nilai grafik.
Artikel ini juga mencakup penggunaan buku kerja eksternal sebagai sumber data grafik. Contoh-contoh memperlihatkan cara membuat dan menetapkan buku kerja eksternal, mengambil jalur buku kerja eksternal yang terhubung ke sebuah grafik, serta mengedit data grafik 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 grafik garis dari mode tampilan yang tersedia.
Sertakan Data dari Baris dan Kolom Tersembunyi
Gunakan IChart.setPlotVisibleCellsOnly untuk mengontrol apakah grafik 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 grafik; ia tidak menyembunyikan atau menampilkan kembali baris atau kolom lembar kerja.
Unduh hidden-source-data.pptx dan letakkan di direktori kerja. Slide pertama berisi grafik kolom sebagai bentuk pertama. Lembar kerja yang disematkan, Sheet1, berisi rentang sumber berikut, A1:C4. Baris 3 dan kolom C tersembunyi, 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 IChartData.getChartDataWorkbook dan baca IChartDataCell.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 secara berurutan.
Untuk contoh ini, segarkan data grafik setelah mengubah pengaturan pemetaan: pertahankan buku kerja yang disematkan dengan readWorkbookStream dan muat kembali dengan writeWorkbookStream. Saat menyertakan semua sel, gunakan juga setRange untuk mengembalikan rentang lengkap, termasuk kategori Februari yang tersembunyi. Mengubah flag saja tidak cukup untuk menyegarkan data grafik dan label kategori yang di‑cache pada contoh ini.
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 grafik 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 + ".pptx", SaveFormat.Pptx);
}
} else {
System.out.println("The first shape is not a chart.");
}
} finally {
presentation.dispose();
}
Contoh menyimpan hidden_cells_true.pptx dengan hanya nilai Ritel yang terlihat (10 dan 20), dan hidden_cells_false.pptx dengan semua enam nilai. Gambar di bawah mengilustrasikan dua mode pemetaan. Baris 3 dan kolom C tetap tersembunyi pada kedua buku kerja yang disematkan.
Hanya sel yang terlihat (true) |
Semua sel (false) |
|---|---|
![]() |
![]() |
Sel tersembunyi yang berisi nilai berbeda dari sel kosong. IChart.setDisplayBlanksAs mengontrol bagaimana nilai yang hilang ditampilkan; ia tidak memasukkan atau mengecualikan data sumber yang tersembunyi. Lihat Kontrol Tampilan Sel Kosong untuk contoh.
Baca dan Tulis Data Grafik dari Buku Kerja
Aspose.Slides for Java menyediakan metode readWorkbookStream dan writeWorkbookStream yang memungkinkan Anda membaca dan menulis buku kerja data grafik (yang berisi data grafik yang diedit dengan Aspose.Cells). Catatan bahwa data grafik harus diatur dengan cara yang sama atau memiliki struktur serupa dengan sumbernya.
Contoh ini membuka chart.pptx, yang harus berisi sebuah grafik sebagai bentuk pertama pada slide pertama. Contoh 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 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 Grafik Setelah Modifikasi Buku Kerja
Saat Anda mengganti buku kerja yang disematkan dengan yang sudah dimodifikasi, grafik 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 grafik. Contoh ini memerlukan chart.pptx dengan grafik sebagai 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.
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();
// Ubah byte buku kerja 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();
}
Menghapus 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 grafik.
Tetapkan Sel Buku Kerja sebagai Label Data Grafik
Anda dapat menggunakan teks dari sel buku kerja sebagai label data grafik. Langkah‑langkah berikut menunjukkan cara menautkan label pada grafik gelembung ke sel‑sel di buku kerja datanya.
- Buat instance kelas Presentation.
- Akses slide pertama dengan indeks nol‑berbasis.
- Tambahkan grafik gelembung dengan data default.
- Akses seri grafik.
- Tetapkan sel buku kerja sebagai label data.
- Simpan presentasi.
Contoh ini membuka chart2.pptx, yang harus berisi setidaknya satu slide, dan menambahkan grafik gelembung dengan data default. Contoh menggunakan sel A10:A12 pada lembar kerja 0 untuk tiga label pertama pada seri pertama, mengaktifkan label dari sel, dan menyimpan hasil ke resultchart.pptx.
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 memberikan akses ke lembar kerja dalam buku kerja grafik. Contoh ini membuat grafik pai dengan data default dan mencetak setiap nama 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
Contoh ini membuat grafik 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. Hasil disimpan ke pres.pptx.
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 Tertanam yang Tidak Didukung
Aspose.Slides tidak mendukung format buku kerja Excel biner (.xlsb) yang dapat disematkan dalam beberapa grafik. Anda dapat menggunakan metode getEmbeddedWorkbookType pada IChartData bersama dengan enumerasi WorkbookType untuk mendeteksi format yang tidak didukung dan melewatkan grafik‑grafik tersebut. Contoh ini memeriksa bentuk pada slide pertama sample.pptx, melewatkan bentuk yang bukan grafik, dan mencetak pesan diagnostik untuk setiap grafik dengan buku kerja .xlsb yang disematkan.
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 grafik yang didukung di sini.
}
} finally {
presentation.dispose();
}
Buku Kerja Eksternal
Aspose.Slides mendukung penggunaan buku kerja eksternal sebagai sumber data untuk grafik.
Buat Buku Kerja Eksternal
Gunakan readWorkbookStream dan setExternalWorkbook untuk mengekspor buku kerja grafik yang disematkan ke file dan menautkan grafik ke buku kerja eksternal tersebut.
Contoh ini membuat grafik pai dengan data default, menulis buku kerjanya ke externalWorkbook1.xlsx, dan menyelesaikan penulisan file sebelum menetapkan file sebagai sumber data grafik. Contoh menyimpan presentasi yang ditautkan ke externalWorkbook.pptx.
import com.aspose.slides.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600);
Path workbookPath = Paths.get("externalWorkbook1.xlsx").toAbsolutePath();
byte[] workbookData = chart.getChartData().readWorkbookStream();
try {
Files.write(workbookPath, workbookData);
chart.getChartData().setExternalWorkbook(workbookPath.toString());
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 metode setExternalWorkbook, Anda dapat menetapkan buku kerja eksternal ke sebuah grafik sebagai sumber datanya. Metode ini juga dapat digunakan untuk memperbarui jalur ke buku kerja eksternal (jika buku kerja tersebut 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 disediakan, jalur tersebut secara otomatis dikonversi menjadi jalur penuh.
Contoh ini memerlukan externalWorkbook.xlsx di direktori kerja. Lembar kerja bernama Sheet1 harus berisi nama seri di B1, nama kategori di A2:A4, dan nilai numerik di B2:B4. Contoh membuat grafik pai, menautkan buku kerja, dan menggunakan setRange untuk memetakan A1:B4 ke satu seri dan tiga kategori. Hasil disimpan ke Presentation_with_externalWorkbook.pptx.
import com.aspose.slides.*;
import java.nio.file.Paths;
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();
String workbookPath = Paths.get("externalWorkbook.xlsx").toAbsolutePath().toString();
chartData.setExternalWorkbook(workbookPath);
chartData.setRange("Sheet1!$A$1:$B$4");
presentation.save("Presentation_with_externalWorkbook.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Parameter updateChartData pada setExternalWorkbook mengontrol apakah buku kerja dimuat.
- Ketika
updateChartDatafalse, hanya jalur buku kerja yang diperbarui. Data grafik tidak dimuat atau diperbarui dari buku kerja target, sehingga buku kerja dapat tidak tersedia. - Ketika
updateChartDatatrue, data grafik diperbarui dari buku kerja target.
Contoh berikut menetapkan URL placeholder dengan updateChartData false. Contoh mempertahankan data default grafik 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 Grafik
Untuk mengidentifikasi buku kerja yang ditautkan ke sebuah grafik, pertama periksa apakah grafik menggunakan sumber data eksternal. Jika ya, Anda dapat mengambil jalur buku kerja dengan mengikuti langkah‑langkah berikut.
- Buat instance kelas Presentation.
- Akses slide pertama dengan indeks nol‑berbasis.
- Periksa bahwa bentuk pertama adalah grafik.
- Baca tipe sumber data grafik.
- Jika sumbernya adalah buku kerja eksternal, baca jalurnya.
Contoh ini membuka externalWorkbook.pptx, yang dibuat pada contoh sebelumnya, dan memeriksa bentuk pertama pada slide pertama. Jika bentuk tersebut adalah grafik yang ditautkan ke buku kerja eksternal, contoh mencetak getExternalWorkbookPath ke konsol. Kemudian contoh menyimpan salinan presentasi ke Result.pptx.
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 Grafik
Anda dapat mengedit data dalam buku kerja eksternal dengan cara yang sama seperti mengubah isi buku kerja internal. Ketika buku kerja eksternal tidak dapat dimuat, sebuah pengecualian akan dilempar.
Contoh ini memerlukan presentation.pptx dengan grafik sebagai bentuk pertama pada slide pertama dan buku kerja eksternal yang dapat diakses. Contoh menetapkan nilai sel untuk titik data pertama pada seri pertama menjadi 100 dan menyimpan presentasi ke presentation_out.pptx. Mengedit nilai sel dapat memperbarui file XLSX eksternal yang ditautkan, jadi gunakan salinan jika Anda perlu menjaga buku kerja asli tetap tidak berubah.
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 Grafik
Jika sebuah grafik menggunakan buku kerja eksternal yang hilang atau tidak tersedia, Aspose.Slides dapat membangun kembali buku kerja grafik dari data yang di‑cache dalam presentasi. Buat LoadOptions, panggil LoadOptions.setSpreadsheetOptions, dan setel ISpreadsheetOptions.setRecoverWorkbookFromChartCache ke true sebelum membuka presentasi.
Contoh Java berikut membuka presentation.pptx, yang pada slide pertama harus berupa grafik yang merujuk ke buku kerja eksternal yang tidak tersedia, dan 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 penggunaan data grafik yang di‑cache merupakan solusi yang dapat diterima, karena cache mungkin tidak berisi perubahan yang dibuat pada buku kerja eksternal setelah presentasi terakhir kali diperbarui.
FAQ
Apakah saya dapat menentukan apakah sebuah grafik tertentu terhubung ke buku kerja eksternal atau yang disematkan?
Ya. Sebuah grafik 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 mereka disimpan?
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.
Bisakah saya menggunakan buku kerja yang berada di sumber daya/berbagi jaringan?
Ya, buku kerja tersebut dapat digunakan sebagai sumber data eksternal. Namun, pengeditan 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. Mengedit data grafik yang didukung sel dapat juga 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 proteksi sebelumnya atau menyiapkan salinan yang telah didekripsi (misalnya, menggunakan Aspose.Cells) dan menautkan ke salinan tersebut.
Dapatkah beberapa grafik merujuk ke buku kerja eksternal yang sama?
Ya. Setiap grafik menyimpan tautannya masing‑masing. Jika semuanya menunjuk ke file yang sama, memperbarui file tersebut akan tercermin di setiap grafik pada pemuatan data berikutnya.

