Android'de Sunumlarda Grafik Çalışma Kitaplarını Yönet

Genel Bakış

Bu makale, Aspose.Slides içinde grafik çalışma kitaplarıyla nasıl çalışılacağını açıklar. Çalışma kitabı akışları aracılığıyla grafik verilerini okuma ve yazma, çalışma kitabı hücrelerini grafik veri etiketleri olarak kullanma, çalışma sayfası koleksiyonlarına erişme ve grafik değerleri için veri kaynağı türünü belirtme yöntemlerini gösterir.

Ayrıca, harici çalışma kitaplarının grafik veri kaynakları olarak kullanılması da ele alınır. Örnekler, harici bir çalışma kitabı oluşturup atamayı, bir grafik ile ilişkilendirilmiş harici çalışma kitabının yolunu almayı ve çalışma kitabı mevcut olduğunda grafik verilerini düzenlemeyi gösterir.

Eksik veriyi temsil eden çalışma kitabı hücreleri için, boş hücre ile sıfır arasındaki farkı ve mevcut gösterim modlarının bir çizgi grafiği karşılaştırmasını görmek için Boş Hücrelerin Görüntülenmesini Kontrol Et sayfasına bakın.

Gizli Satır ve Sütunlardan Veri Dahil Et

Gizli çalışma sayfası satır ve sütunlarından veri çizmeyi kontrol etmek için IChart.setPlotVisibleCellsOnly kullanın. Görünür hücreleri yalnızca çizmek için true, hem görünür hem de gizli hücreleri dahil etmek için false olarak ayarlayın. Bu ayar grafik çizimini kontrol eder; çalışma sayfası satır veya sütunlarını gizlemez veya göstermez.

örnek sunum ilk slaytındaki ilk şekil olarak bir sütun grafik içerir. Gömülü çalışma sayfası Sheet1, aşağıdaki kaynak aralığını içerir, A1:C4. Satır 3 ve sütun C gizlidir, ancak hücreleri hâlâ değer içerir.

Çalışma sayfası satırı A: Ay B: Perakende C: Toptan (gizli sütun)
2 Ocak 10 30
3 (gizli satır) Şubat 40 60
4 Mart 20 50

Kaynak hücrelere IChartData.getChartDataWorkbook aracılığıyla erişin ve gizli durumlarını incelemek için IChartDataCell.isHidden okuyun. Bu yöntem gizli durumunu değiştirmeden raporlar. Bu dosyada, B2 görünür, B3 gizli satıra ait ve C2 gizli sütuna aittir; örnek sırasıyla false, true ve true değerlerini yazdırır.

Bu örnek için, çizim ayarını değiştirdikten sonra grafik verilerini yenileyin: gömülü çalışma kitabını readWorkbookStream ile tutun ve writeWorkbookStream ile yeniden yükleyin. Tüm hücreleri dahil ederken, gizli Şubat kategorisini de içeren tam aralığı geri yüklemek için ayrıca setRange kullanın. Bayrağı yalnızca değiştirmek bu örneğin önbelleğe alınmış grafik veri ve kategori etiketlerini yenilemek için yeterli değildir.

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);

            // Gömülü çalışma kitabından grafik verilerini yenile.
            chart.getChartData().writeWorkbookStream(workbookData);
            if (!visibleOnly) {
                // Gizli kategoriler dahil olmak üzere tam kaynak aralığını geri yükle.
                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();
}

Örnek, sunumun iki sürümünü kaydeder: yalnızca görünür Perakende değerlerini (10 ve 20) içeren bir sürüm ve tüm altı değeri içeren bir sürüm. Aşağıdaki görseller iki çizim modunu gösterir. Satır 3 ve sütun C her iki gömülü çalışma kitabında da gizli kalır.

Yalnızca görünür hücreler (true) Tüm hücreler (false)
Yalnızca görünür hücreler: Ocak ve Mart için Perakende değerleri 10 ve 20. Tüm hücreler: Ocak, Şubat ve Mart için Perakende ve Toptan değerleri.

Değer içeren bir gizli hücre, boş bir hücreden farklıdır. IChart.setDisplayBlanksAs eksik değerlerin nasıl gösterileceğini denetler; gizli kaynak verileri dahil eder ya da çıkarmaz. Bir örnek için Boş Hücrelerin Görüntülenmesini Kontrol Et sayfasına bakın.

Grafiğin Veri Aralığını Al

Mevcut bir sunumda çalışma kitabı verilerini güncellemeden önce, her grafiğin hangi çalışma sayfası hücrelerini kullandığını belirlemek için kaynak aralıklarını inceleyin. IChartData.getRange yöntemi, Sheet1!$A$1:$D$5 gibi çalışma sayfası nitelikli bir formül olarak geçerli veri aralığını döndürür. Burada Sheet1 çalışma sayfası adıdır, ! hücre aralığından ayırır ve $A$1:$D$5 A1‑den D5’e kadar olan hücreleri (dahil) tanımlar. Dolar işaretleri mutlak satır ve sütun referanslarını gösterir.

Yöntem, grafiği veya onun çalışma kitabını değiştirmeden geçerli aralığı okur. Grafik veri kaynağı olarak bir çalışma kitabı kullanmıyorsa, InvalidOperationException oluşur. Daha fazla bilgi için ChartData API Reference sayfasına bakın.

Bu örnek bir sunumu açar ve her slaytta doğrudan şekilleri tarayarak grafik olup olmadığını kontrol eder. Her grafiğin adını ve kaynak aralığını yazar. Bir grafik çalışma kitabı kullanmıyorsa bir mesaj yazar ve bir sonraki grafikle devam eder.

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();
}

Bir Çalışma Kitabından Grafik Verilerini Okuma ve Yazma

Aspose.Slides for Android via Java, grafik verileri (Aspose.Cells ile düzenlenen) içeren çalışma kitaplarını okumanıza ve yazmanıza izin veren readWorkbookStream ve writeWorkbookStream yöntemlerini sunar. Not grafik verileri aynı şekilde düzenlenmeli veya kaynağa benzer bir yapıya sahip olmalıdır.

Bu örnek, ilk slaytındaki ilk şekil olarak bir grafik içeren bir sunum kullanır. Gömülü çalışma kitabını bir bayt dizisine okur, mevcut serileri ve kategorileri temizler ve aynı çalışma kitabını geri yazar. Değişiklikler bellekte kalır; örnek sunumu kaydetmez.

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();
}

Çalışma Kitabı Değiştirildikten Sonra Grafik Düzenini Doğrulama

Gömülü bir çalışma kitabını değiştirilmiş bir kitapla değiştirdiğinizde, grafik orijinal seri ve kategori koleksiyonlarını korur. Bu uyumsuzluk, IChart.validateChartLayout yönteminin indeks dışı hata ile başarısız olmasına neden olabilir. Güncellenmiş çalışma kitabını geri yazmadan önce mevcut serileri ve kategorileri temizleyin. Bu örnek, ilk slayttaki ilk şekil olarak bir grafiği kullanır. Yorum, çalışma kitabı düzenlemesinin nerede gerçekleşeceğini gösterir; çalıştırılabilir örnek orijinal çalışma kitabını geri yazar ve düzeni bellekte doğrular.

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();

        // Çalışma kitabı baytlarını burada değiştirin, örneğin Aspose.Cells kullanarak.

        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();
}

Koleksiyonları temizlemek, çalışma kitabı geri yazılmadan önce eski veri referanslarını kaldırır. Güncellenmiş çalışma kitabı için gerekli serileri ve kategori eşlemelerini yeniden oluşturun ve grafiği kullanmadan önce bu eşlemeleri uygulayın.

Çalışma Kitabı Hücreleri için Özel Sayı Biçimleri Ayarla

İChartDataCell.setCustomNumberFormat kullanarak bir grafiğin gömülü çalışma kitabındaki sayısal değerlerin nasıl görüneceğini denetleyebilirsiniz. Örneğin bir rapor, dönüşüm oranını yüzde olarak dört ondalık basamakla ve katsayıyı beş ondalık basamakla gösterebilir. Her iki değeri de sayısal tutun, böylece hesaplamalar ve grafik çizimi için kullanılabilir.

Bir sayı biçimi yalnızca görüntüyü değiştirir, saklanan değeri değiştirmez. 0.0000% biçimi 0.125 değerini 12.5000% olarak gösterir; saklanan sayı 12.5 ile değiştirilmez. Benzer şekilde 0.00000 biçimi 0.1234567 değerini 0.12346 olarak gösterir, saklanan değer yuvarlanmaz. Özel biçim boş bir dize ("") ise, getPresetNumberFormat tarafından döndürülen biçim kullanılır.

Aşağıdaki örnek bir sütun grafik oluşturur ve hücrelerine getChartDataWorkbook aracılığıyla erişir. Çalışma sayfası 0’da B2 dönüşüm oranını, C2 ise katsayıyı içerir. Her iki hücre de grafik değerleri sağlar. Örnek ayrıca kaynak biçimlerine bağlı değer etiketlerini etkinleştirir.

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();
}

Çalışma kitabı hücre biçimleri, doğrudan eksenlere ya da veri etiketlerine uygulanan biçimlerden ayrıdır. Bu örnekte, her etiket kaynak hücresinin değerini gösterir çünkü setShowValue true olarak ayarlanmıştır ve setNumberFormatLinkedToSource true olduğu için kaynak sayı biçimini takip eder. Sunumu kaydedip tekrar açtıktan sonra etiketler 12.5000% ve 0.12346 olarak gösterilir. Dikey eksen kendi sayı biçimini [setNumberFormat](https://reference.aspose.com/slides/androidjava/com.aspose.slides/iaxis/#setNumberFormat-java.lang.String-) ile 0.00 olarak alır ve [setNumberFormatLinkedToSource](https://reference.aspose.com/slides/androidjava/com.aspose.slides/iaxis/#setNumberFormatLinkedToSource-boolean-) false olarak ayarlanır.

Bir veri etiketini bağımsız biçimlendirmek için, kaynak‑bağlantı işaretçisini false yapın ve bir biçim atamak için setNumberFormat kullanın. Bu, çalışma kitabı hücresinin biçimini değiştirmez. Örneğin 0.00 bağımsız etiket biçimi ilk değeri 0.13 olarak gösterirken B2 hâlâ 12.5000% gösterir. Doğrudan etiket biçimlendirme için Chart Data Labels sayfasına bakın.

Aşağıdaki resim, sunumu kaydedip tekrar açtıktan sonra render edilmiştir:

Kaynak‑bağlantılı etiketleri 12.5000% ve 0.12346 gösteren sütun grafik ve bağımsız olarak biçimlendirilmiş sayısal eksen.

Bir Çalışma Kitabı Hücresini Grafik Veri Etiketi Olarak Ayarla

Çalışma kitabı hücrelerindeki metni grafik veri etiketleri olarak kullanabilirsiniz.

Bu örnek, mevcut bir sunumun ilk slaytına varsayılan verileri olan bir balon grafik ekler. İlk serideki ilk üç etiket için çalışma sayfası 0’da A10:A12 hücrelerini kullanır, hücrelerden etiketleri etkinleştirir ve güncellenmiş sunumu kaydeder.

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();
}

Çalışma Sayfalarını Yönet

IChartDataWorkbook.getWorksheets yöntemi, bir grafik çalışma kitabındaki çalışma sayfalarına erişim sağlar. Bu örnek varsayılan verilerle bir pasta grafik oluşturur ve her çalışma sayfasının adını konsola yazar.

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();
}

Veri Kaynağı Türünü Belirle

Seri nokta değerleri doğrudan sayısal sabitler olarak da saklanabilir. Tam bir örnek için Set Series Values Using Numeric Literals sayfasına bakın. Nokta değerlerinin kaynak türü, grafiğin iç veya dış çalışma kitabı yapılandırmasından ayrı bir kavramdır; sayısal sabitlerin kullanılması tek başına gömülü çalışma kitabını kaldırmaz.

Bu örnek varsayılan verilerle bir 3D sütun grafik oluşturur ve iki seri adını farklı veri kaynaklarıyla ayarlar. İlk ad bir dize sabiti, ikincisi ise çalışma sayfası 0’da C1 hücresidir. DataSourceType enum’u, her ad için kaynağı seçer. Örnek, güncellenmiş seri adlarıyla sunumu kaydeder.

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();
}

Desteklenmeyen Gömülü Çalışma Kitabı Biçimlerini Algıla

Aspose.Slides, bazı grafiklerde gömülebilen Excel ikili çalışma kitabı (.xlsb) biçimini desteklemez. getEmbeddedWorkbookType yöntemini IChartData üzerine ve WorkbookType enum’ı ile birlikte kullanarak desteklenmeyen biçimleri tespit edebilir ve bu grafiklerden kaçınabilirsiniz. Bu örnek mevcut bir sunumun ilk slaytındaki şekilleri inceler, grafik olmayan şekilleri atlar ve .xlsb gömülü çalışma kitabı bulunan her grafik için tanı mesajı yazar.

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;
        }

        // Desteklenen grafik çalışma kitabı verilerini burada okuyun veya değiştirin.
    }
} finally {
    presentation.dispose();
}

Harici Çalışma Kitabı

Aspose.Slides, grafikler için veri kaynağı olarak harici çalışma kitaplarını kullanmayı destekler.

Harici Bir Çalışma Kitabı Oluştur

readWorkbookStream ve setExternalWorkbook kullanarak gömülü bir grafik çalışma kitabını bir dosyaya dışa aktarabilir ve grafiği bu harici çalışma kitabına bağlayabilirsiniz.

Bu örnek varsayılan verilerle bir pasta grafik oluşturur ve çalışma kitabını dışa aktarır. Dosya yazımı tamamlandıktan sonra harici çalışma kitabını grafik veri kaynağı olarak atar ve bağlanmış sunumu kaydeder.

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();
}

Harici Çalışma Kitabı Ata

setExternalWorkbook yöntemiyle bir grafiğe harici bir çalışma kitabını veri kaynağı olarak atayabilirsiniz. Bu yöntem aynı zamanda harici çalışma kitabının yolunu (dosya taşındıysa) güncellemek için de kullanılabilir.

Uzak konumlardaki ya da kaynaklardaki çalışma kitaplarındaki verileri doğrudan düzenleyemezsiniz, ancak bu çalışma kitaplarını hâlâ harici veri kaynağı olarak kullanabilirsiniz. Bir harici çalışma kitabı için göreli bir yol sağlanırsa, otomatik olarak tam yola dönüştürülür.

Bu örnek, Sheet1 adlı çalışma sayfasında B1’de seri adı, A2:A4’de kategori adları ve B2:B4’de sayısal değerler bulunan bir harici çalışma kitabını kullanır. Örnek bir pasta grafik oluşturur, çalışma kitabını bağlar ve A1:B4 aralığını bir seri ve üç kategoriye eşlemek için setRange kullanır. Bağlantılı grafikle sunumu kaydeder.

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();
}

setExternalWorkbook yönteminin updateChartData parametresi, çalışma kitabının yüklenip yüklenmeyeceğini denetler.

  • updateChartData false olduğunda yalnızca çalışma kitabı yolu güncellenir. Grafik verileri hedef çalışma kitabından yüklenmez veya güncellenmez, bu yüzden çalışma kitabı mevcut olmayabilir.
  • updateChartData true olduğunda grafik verileri hedef çalışma kitabından güncellenir.

Aşağıdaki örnek, updateChartData false olarak ayarlanmış bir yer tutucu URL atar. Pasta grafiğinin varsayılan verileri korunur ve erişilemeyen çalışma kitabı yüklenmeden sunum kaydedilir.

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();
}

Bir Grafiğin Harici Veri Kaynağı Çalışma Kitabı Yolunu Al

Bir grafiğe bağlı çalışma kitabını belirlemek için grafiğin harici bir veri kaynağı kullanıp kullanmadığını kontrol edin ve çalışma kitabı yolunu alın.

Bu örnek, harici bir çalışma kitabına bağlı bir sunumun ilk slaydındaki ilk şekli inceler. Eğer bu şekil harici bir çalışma kitabına bağlanmış bir grafikse, getExternalWorkbookPath konsola yazar. Ardından sunumun bir kopyasını kaydeder.

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();
}

Grafik Verilerini Düzenle

Harici çalışma kitaplarındaki verileri, iç çalışma kitaplarındaki içerik değişiklikleriyle aynı şekilde düzenleyebilirsiniz. Harici bir çalışma kitabı yüklenemezse bir istisna fırlatılır.

Bu örnek, ilk slaydın ilk şekli olan ve erişilebilir bir harici çalışma kitabına bağlanmış bir grafik kullanır. İlk serideki ilk veri noktasının hücre‑temelli değerini 100 olarak ayarlar ve güncellenmiş sunumu kaydeder. Hücre değerlerini düzenlemek harici XLSX dosyasını güncelleyebilir; bu nedenle orijinali korumak isterseniz bir kopya kullanın.

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();
}

Grafik Önbelleğinden Bir Çalışma Kitabını Kurtar

Bir grafik, eksik veya erişilemez bir harici çalışma kitabı kullandığında, Aspose.Slides sunumda önbelleğe alınan verilerden grafik çalışma kitabını yeniden oluşturabilir. LoadOptions oluşturun, LoadOptions.setSpreadsheetOptions çağırın ve ISpreadsheetOptions.setRecoverWorkbookFromChartCache özelliğini true olarak ayarlayın; ardından sunumu açın.

Aşağıdaki Java örneği, ilk slaydın ilk şekli olan ve erişilemeyen bir harici çalışma kitabına başvuran bir grafik için çalışma kitabı verilerini kurtarır. Kurtarılan verilere IChart.getChartData ve IChartData.getChartDataWorkbook aracılığıyla erişir:

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();

        // Kurtarılan çalışma kitabı verilerini burada okuyun veya değiştirin.
    } else {
        System.out.println("The first shape is not a chart.");
    }
} finally {
    presentation.dispose();
}

Harici çalışma kitabı bulunamaz ve kurtarma devre dışı bırakılmışsa, Aspose.Slides bir istisna fırlatır. Önbellekten gelen grafik verilerini kullanmak kabul edilebilir bir geri dönüş ise yalnızca kurtarmayı etkinleştirin; önbellek, sunum son güncellenmeden sonra harici çalışma kitabında yapılan değişiklikleri içermeyebilir.

SSS

Belirli bir grafiğin harici bir çalışma kitabına mı yoksa gömülü bir çalışma kitabına mı bağlandığını belirleyebilir miyim?
Evet. Bir grafik, bir veri kaynağı türü ve bir harici bir çalışma kitabının yolu içerir; kaynak harici bir çalışma kitabıysa tam yolu okuyarak bir dış dosyanın kullanıldığını doğrulayabilirsiniz.

Harici çalışma kitapları için göreli yollar destekleniyor mu ve nasıl depolanıyor?
Evet. Göreli bir yol belirttiğinizde otomatik olarak mutlak yola dönüştürülür. Sunum, mutlak yolu PPTX dosyasında saklar; bu yüzden çalışma kitabını taşıdığınızda bağlantıyı güncellemeniz gerekebilir.

Ağ kaynakları/paylaşımlardaki çalışma kitaplarını kullanabilir miyim?
Evet, bu tür çalışma kitapları harici veri kaynağı olarak kullanılabilir. Ancak, Aspose.Slides doğrudan uzak çalışma kitaplarını düzenlemeyi desteklemez; yalnızca bir kaynak olarak kullanılabilirler.

Aspose.Slides sunumu kaydederken harici XLSX dosyasını üzerine yazar mı?
Sunum, bir harici dosyaya bağlantı saklar. Hücre‑temelli grafik verilerini düzenlemek aynı zamanda bağlı yerel XLSX dosyasını da güncelleyebilir. Orijinal dosyanın değişmemesi gerekiyorsa çalışma kitabının bir kopyasını kullanın.

Harici dosya parolayla korunmuşsa ne yapmalıyım?
Aspose.Slides bağlanırken bir parola kabul etmez. Yaygın bir yaklaşım, önceden korumayı kaldırmak veya bir şifre çözülmüş kopya hazırlamaktır (örneğin Aspose.Cells kullanarak) ve bu kopyaya bağlanmaktır.

Birden fazla grafik aynı harici çalışma kitabına başvurabilir mi?
Evet. Her grafik kendi bağlantısını saklar. Hepsi aynı dosyaya işaret ediyorsa, dosyada yapılan güncellemeler bir sonraki veri yüklemesinde her grafiğe yansır.