Java Kullanarak 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 dış çalışma kitaplarını grafik veri kaynağı olarak kullanmayı da kapsar. Örnekler, bir dış çalışma kitabının nasıl oluşturulup atandığını, bir grafikle ilişkili dış çalışma kitabının yolunun nasıl alındığını ve çalışma kitabı mevcut olduğunda grafik verisinin nasıl düzenleneceğini gösterir.

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

Aspose.Slides, grafik verilerini (Aspose.Cells ile düzenlenmiş grafik verilerini içeren) çalışma kitaplarını okuma ve yazma imkanı sağlayan ReadWorkbookStream ve WriteWorkbookStream yöntemlerini sunar. Not: grafik verileri aynı şekilde düzenlenmiş olmalı ya da kaynağa benzer bir yapıya sahip olmalıdır.

import com.aspose.slides.*;

Presentation pres = new Presentation("chart.pptx");
try {
    Chart chart = (Chart) pres.getSlides().get_Item(0).getShapes().get_Item(0);
    IChartData data = chart.getChartData();

    byte[] stream = data.readWorkbookStream();

    data.getSeries().clear();
    data.getCategories().clear();

    data.writeWorkbookStream(stream);
} finally {
    if (pres != null) pres.dispose();
}

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

Bir gömülü çalışma kitabını değiştirilmiş bir sürümle değiştirdiğinizde, grafik orijinal seri ve kategori koleksiyonlarını korur. Bu tutarsızlık, IChart.validateChartLayout metodunun ArgumentOutOfRangeException (parametre: index) atmasına neden olabilir. Bu istisna oluşmasını önlemek için, güncellenmiş çalışma kitabını grafiğe geri yazmadan önce mevcut serileri ve kategorileri önce temizleyin.

// Çalışma kitabı akışını değiştirdikten sonra (örn., Aspose.Cells kullanarak)
byte[] updatedWorkbook = baos.toByteArray();

// Mevcut veri referanslarını temizle.

chart.getChartData().writeWorkbookStream(updatedWorkbook);

chart.validateChartLayout();

Koleksiyonları temizlemek, grafik veri yapısının yeni çalışma kitabıyla hizalanmasını sağlar ve validateChartLayout‘un hatasız tamamlanmasına olanak verir.

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

  1. Presentation sınıfının bir örneğini oluşturun.
  2. İndeksi aracılığıyla bir slaytın referansını alın.
  3. Bazı verilerle bir Balon grafiği ekleyin.
  4. Grafik serisine erişin.
  5. Çalışma kitabı hücresini veri etiketi olarak ayarlayın.
  6. Sunumu kaydedin.

Bu Java kodu bir çalışma kitabı hücresini grafik veri etiketi olarak ayarlamayı gösterir:

// Bir sunum dosyasını temsil eden sunum sınıfının bir örneğini oluşturur
import com.aspose.slides.*;

String lbl0 = "Label 0 cell value";
String lbl1 = "Label 1 cell value";
String lbl2 = "Label 2 cell value";

// Instantiates a presentation class that represents a presentation file
Presentation pres = new Presentation("chart2.pptx");
try {
    ISlide slide = pres.getSlides().get_Item(0);
    IChart chart = slide.getShapes().addChart(ChartType.Bubble, 50, 50, 600, 400, true);
    IChartSeriesCollection series = chart.getChartData().getSeries();
    
    IDataLabelCollection dataLabelCollection = series.get_Item(0).getLabels();
    dataLabelCollection.getDefaultDataLabelFormat().setShowLabelValueFromCell(true);

    IChartDataWorkbook 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", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

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

Bu Java kodu, bir çalışma sayfası koleksiyonuna erişmek için IChartDataWorkbook.Worksheets metodunun kullanıldığı bir işlemi göstermektedir:

import com.aspose.slides.*;

Presentation pres = new Presentation();
try {
    IChart chart = pres.getSlides().get_Item(0).getShapes().addChart(ChartType.Pie, 50, 50, 400, 500);
    IChartDataWorkbook wb =  chart.getChartData().getChartDataWorkbook();
    for (int i = 0; i < wb.getWorksheets().size(); i++)
        System.out.println(wb.getWorksheets().get_Item(i).getName());
} finally {
    if (pres != null) pres.dispose();
}

Veri Kaynağı Türünü Belirtme

Bu Java kodu, bir veri kaynağı için türün nasıl belirleneceğini gösterir:

import com.aspose.slides.*;

Presentation pres = new Presentation();
try {
    IChart chart = pres.getSlides().get_Item(0).getShapes().addChart(ChartType.Column3D, 50, 50, 600, 400, true);
    IStringChartValue val = chart.getChartData().getSeries().get_Item(0).getName();

    val.setDataSourceType(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", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

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

Aspose.Slides, bazı grafiklerde gömülebilen Excel ikili çalışma kitabı (.xlsb) formatını desteklemez. Desteklenmeyen biçimleri algılamak ve bu grafiklerden kaçınmak için IChartData üzerindeki getEmbeddedWorkbookType metodunu ve WorkbookType enumlarını kullanabilirsiniz.

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

        if (chartData.getDataSourceType() == ChartDataSourceType.InternalWorkbook &&
                chartData.getEmbeddedWorkbookType() == WorkbookType.WorkbookBinaryMacro) {
            // Gömülü çalışma kitabı .xlsb formatında ve desteklenmiyor.
            continue;
        }

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

Dış Çalışma Kitabı

Dış Çalışma Kitabı Oluşturma

readWorkbookStream ve setExternalWorkbook yöntemlerini kullanarak, sıfırdan bir dış çalışma kitabı oluşturabilir veya iç bir çalışma kitabını dışa dönüştürebilirsiniz.

Bu Java kodu dış çalışma kitabı oluşturma sürecini gösterir:

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

Presentation pres = new Presentation();
try {
    final String workbookPath = "externalWorkbook1.xlsx";

    IChart chart = pres.getSlides().get_Item(0).getShapes().addChart(ChartType.Pie, 50, 50, 400, 600);
    FileOutputStream fileStream = new FileOutputStream(workbookPath);
    try {
        byte[] workbookData = chart.getChartData().readWorkbookStream();
        fileStream.write(workbookData, 0, workbookData.length);
    } finally {
        if (fileStream != null) fileStream.close();
    }

    chart.getChartData().setExternalWorkbook(workbookPath);

    pres.save("externalWorkbook.pptx", SaveFormat.Pptx);
} catch (IOException e) {    
} finally {
    if (pres != null) pres.dispose();
}

Dış Çalışma Kitabı Ayarlama

setExternalWorkbook metodunu kullanarak, bir grafiğe dış çalışma kitabını veri kaynağı olarak atayabilirsiniz. Bu yöntem, dış çalışma kitabının yolunu (eğer taşıldıysa) güncellemek için de kullanılabilir.

Uzak konumlardaki veya kaynaklardaki çalışma kitaplarındaki verileri düzenleyemesiniz de, bu çalışma kitaplarını hâlâ dış veri kaynağı olarak kullanabilirsiniz. Bir dış çalışma kitabı için göreceli yol sağlanırsa, otomatik olarak tam yola dönüştürülür.

Bu Java kodu bir dış çalışma kitabı ayarlamayı gösterir:

import com.aspose.slides.*;

// Presentation sınıfının bir örneğini oluşturur
Presentation pres = new Presentation("chart.pptx");
try {
    IChart chart = pres.getSlides().get_Item(0).getShapes().addChart(ChartType.Pie, 50, 50, 400, 600, false);
    IChartData chartData = chart.getChartData();

    chartData.setExternalWorkbook("externalWorkbook.xlsx");

    chartData.getSeries().add(chartData.getChartDataWorkbook().getCell(0, "B1"), 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", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

setExternalWorkbook metodunun ikinci (boolean) parametresi, bir Excel çalışma kitabının yüklenip yüklenmeyeceğini belirtmek için kullanılır.

  • Değeri false olarak ayarlandığında, yalnızca çalışma kitabı yolu güncellenir—grafik verileri hedef çalışma kitabından yüklenmez veya güncellenmez. Bu ayar, hedef çalışma kitabı mevcut olmadığında veya erişilemez olduğunda kullanılabilir.
  • Değeri true olarak ayarlandığında, grafik verileri hedef çalışma kitabından güncellenir.
import com.aspose.slides.*;

// Presentation sınıfının bir örneğini oluşturur
Presentation pres = new Presentation("chart.pptx");
try {
    IChart chart = pres.getSlides().get_Item(0).getShapes().addChart(ChartType.Pie, 50, 50, 400, 600, true);
    IChartData chartData = chart.getChartData();

    ((ChartData)chartData).setExternalWorkbook("http://path/doesnt/exists", false);

    pres.save("Presentation_with_externalWorkbookWithUpdateChartData.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Bir Grafiğin Dış Veri Kaynağı Çalışma Kitabı Yolunu Almak

  1. Presentation sınıfının bir örneğini oluşturun.
  2. İndeksi aracılığıyla bir slaytın referansını alın.
  3. Grafik şekli için bir nesne oluşturun.
  4. Grafiğin veri kaynağını temsil eden kaynak (ChartDataSourceType) türü için bir nesne oluşturun.
  5. Kaynak türünün dış çalışma kitabı veri kaynağı türüyle aynı olmasına dayalı ilgili koşulu belirtin.

Bu Java kodu işlemi gösterir:

import com.aspose.slides.*;

// Presentation sınıfının bir örneğini oluşturur
Presentation pres = new Presentation("chart.pptx");
try {
    ISlide slide = pres.getSlides().get_Item(1);
    IChart chart = (IChart)slide.getShapes().get_Item(0);
    int sourceType = chart.getChartData().getDataSourceType();
    
    if (sourceType == ChartDataSourceType.ExternalWorkbook)
    {
        String path = chart.getChartData().getExternalWorkbookPath();
    }
	
	// Sunumu kaydeder
    pres.save("result.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Grafik Verilerini Düzenleme

Harici çalışma kitaplarındaki verileri, iç çalışma kitaplarının içeriğinde yaptığınız değişiklikler gibi düzenleyebilirsiniz. Bir dış çalışma kitabı yüklenemediğinde istisna fırlatılır.

import com.aspose.slides.*;

// Presentation sınıfının bir örneğini oluşturur
Presentation pres = new Presentation("chart.pptx");
try {
    IChart chart = (IChart)pres.getSlides().get_Item(0).getShapes().get_Item(0);
    ChartData chartData = (ChartData)chart.getChartData();
    
    chartData.getSeries().get_Item(0).getDataPoints().get_Item(0).getValue().getAsCell().setValue(100);
    
    pres.save("presentation_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

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

Bir grafik eksik veya mevcut olmayan bir dış çalışma kitabını kullanıyorsa, Aspose.Slides sunumda önbelleğe alınmış verilerden grafik çalışma kitabını yeniden oluşturabilir. Sunumu açmadan önce LoadOptions oluşturun, SpreadsheetOptions ile yapılandırın ve true ile ISpreadsheetOptions.setRecoverWorkbookFromChartCache metodunu çağırın.

Aşağıdaki Java örneği, grafiği mevcut olmayan bir dış çalışma kitabına referans veren bir sunumu açar ve geri alınan verilere IChart.getChartData ve IChartData.getChartDataWorkbook aracılığıyla erişir:

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

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

Presentation presentation = new Presentation("presentation.pptx", loadOptions);
try {
    IChart chart = (IChart)presentation.getSlides().get_Item(0).getShapes().get_Item(0);
    IChartDataWorkbook recoveredWorkbook = chart.getChartData().getChartDataWorkbook();

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

Harici çalışma kitabı mevcut değilse ve kurtarma devre dışı bırakılmışsa, Aspose.Slides bir istisna fırlatır. Önbellekteki grafik verilerini kullanmak kabul edilebilir bir geri dönüş olduğunda yalnızca kurtarmayı etkinleştirin; çünkü önbellek, sunum son güncellendiğinden beri harici çalışma kitabında yapılan değişiklikleri içermeyebilir.

SSS

Belirli bir grafiğin dış bir çalışma kitabına mı yoksa gömülü bir çalışma kitabına mı bağlı olduğunu belirleyebilir miyim?

Evet. Bir grafiğin bir veri kaynağı türü ve bir dış çalışma kitabı yolu vardır; eğer kaynak dış bir çalışma kitabı ise, dış bir dosyanın kullanıldığını doğrulamak için tam yolu okuyabilirsiniz.

Dış çalışma kitapları için göreceli yollar destekleniyor mu ve nasıl depolanıyor?

Evet. Göreceli bir yol belirttiğinizde, otomatik olarak mutlak bir yola dönüştürülür. Bu, proje taşınabilirliği için elverişlidir; ancak, sunumun PPTX dosyasında mutlak yolu depolayacağını unutmayın.

Ağ kaynakları/paylaşımları üzerindeki çalışma kitaplarını kullanabilir miyim?

Evet, bu tür çalışma kitapları dış veri kaynağı olarak kullanılabilir. Ancak, uzaktaki çalışma kitaplarını doğrudan Aspose.Slides üzerinden düzenlemek desteklenmez; yalnızca kaynak olarak kullanılabilirler.

Sunumu kaydederken Aspose.Slides dış XLSX dosyasını üzerine yazar mı?

Hayır. Sunum, bir dış dosyaya bağlantı saklar ve verileri okurken bu bağlantıyı kullanır. Sunum kaydedildiğinde dış dosya kendisi değiştirilmez.

Dış dosya şifre korumalıysa ne yapmalıyım?

Aspose.Slides, bağlantı kurarken şifre kabul etmez. Yaygın bir yaklaşım, önceden korumayı kaldırmak ya da şifresi çözülmüş bir kopya hazırlamaktır (örneğin, Aspose.Cells kullanarak) ve bu kopyaya bağlantı vermektir.

Birden fazla grafik aynı dış çalışma kitabına referans verebilir mi?

Evet. Her grafik kendi bağlantısını saklar. Hepsi aynı dosyaya işaret ediyorsa, dosya güncellendiğinde veri bir sonraki yüklendiğinde her grafikte de yansır.