Java Kullanarak Sunumlarda Tablo Hücrelerini Yönetme

Genel Bakış

Aspose.Slides, PowerPoint sunumlarındaki tablo hücrelerine erişmenizi ve bunları değiştirmenizi sağlar. Bu makale, birleştirilmiş tablo hücrelerini nasıl tanımlayacağınızı, hücre kenarlıklarını nasıl kaldıracağınızı, hücreleri birleştirdikten veya böldükten sonra hücre numaralandırmasıyla nasıl çalışılacağını, bir hücrenin arka plan rengini nasıl değiştireceğinizi ve bir tablo hücresine nasıl resim ekleyeceğinizi açıklar. Örnekler, bir sunumu nasıl oluşturup açacağınızı, bir slayttan tablo nasıl alacağınızı, hücre özellikleri aracılığıyla hücre biçimlendirmesini nasıl güncelleyeceğinizi ve değiştirilen sunumu PPTX dosyası olarak nasıl kaydedeceğinizi gösterir.

Aspose.Slides, tablo hücrelerine (sütun, satır) sırasıyla erişmek için sıfır tabanlı indeksler kullanır.

Birleştirilmiş Tablo Hücresini Tanımlama

Örnek, mevcut bir sunumu açar ve ilk slayttaki ilk şekli bir tablo olarak erişir. Slayt ve şeklin mevcut olduğunu ve şeklin bir tablo olduğunu varsayar. Ardından tüm satır ve sütunlar üzerinde iterasyon yapar ve birleştirilmiş bölgelerdeki hücreleri tanımlamak için isMergedCell metodunu kullanır. Eşleşen her hücre için satır;sütun sırasında hücre koordinatlarını, getRowSpan, getColSpan, ve bölgenin başlangıç koordinatlarını, getFirstRowIndex ve getFirstColumnIndex metodlarını yazdırır.

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation_with_table.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    ITable table = (ITable) slide.getShapes().get_Item(0);

    int rowCount = table.getRows().size();
    for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
    {
        int columnCount = table.getColumns().size();
        for (int columnIndex = 0; columnIndex < columnCount; columnIndex++)
        {
            ICell cell = table.get_Item(columnIndex, rowIndex);
            if (cell.isMergedCell())
            {
                System.out.printf("Cell %d;%d belongs to a merged region with RowSpan=%d and ColSpan=%d starting at %d;%d.%n", rowIndex, columnIndex, cell.getRowSpan(), cell.getColSpan(), cell.getFirstRowIndex(), cell.getFirstColumnIndex());
            }
        }
    }
} finally {
    presentation.dispose();
}

Tablo Hücresi Kenarlıklarını Kaldırma

Bir Presentation oluşturun ve ilk slaydına addTable yöntemiyle bir tablo ekleyin. Sütun genişlikleri, satır yükseklikleri ve tablo konumu puan cinsinden belirtilir. Örnek, dört hücre kenarlığının hepsini FillType.NoFill olarak ayarlar ve böylece kenarlıklar görünmez hâle gelir.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    double[] columnWidths = { 50, 50, 50, 50 };
    double[] rowHeights = { 50, 30, 30, 30, 30 };
    ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);

    for (IRow row : table.getRows())
        for (ICell cell : row)
        {
            cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.NoFill);
            cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.NoFill);
            cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.NoFill);
            cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.NoFill);
        }

    presentation.save("table.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Tablo Hücrelerini Birleştirme

Bir dikdörtgen tablo hücresi aralığını tek bir hücreye birleştirmek için mergeCells yöntemini kullanın. Aralığın sol‑üst ve sağ‑alt köşelerindeki hücreleri belirtin. Son argüman, birleştirmenin belirtilen aralığın dışındaki hücreleri içerip içermeyeceğini kontrol eder; false birleştirmenin yalnızca bu aralık içinde kalmasını sağlar.

Örnek, 70 puanlık sütun ve satırlara sahip 4x4 bir tablo oluşturur, ardından (1, 1) ile (2, 2) arasındaki dört ortadaki hücreyi birleştirir. Ortaya çıkan hücre iki sütun ve iki satır kapsar, ancak tablonun temel ızgarası dört sütun ve dört satır olarak kalır. Birleştirilmiş hücrenin içeriğine veya biçimlendirmesine erişmek için sol‑üst konumunu kullanın: bu örnekte table.get_Item(1, 1). Birleştirme aralığındaki diğer konumlar tablo ızgarasının bir parçası olarak kalır, bu yüzden aralığın dışındaki hücrelerin indeksleri değişmez.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    double[] columnWidths = { 70, 70, 70, 70 };
    double[] rowHeights = { 70, 70, 70, 70 };
    ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);

    table.mergeCells(table.get_Item(1, 1), table.get_Item(2, 2), false);

    presentation.save("merged_cells.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Tablo Hücrelerini Bölme

Önceki örnekte hücrelerin birleştirilmesi tablonun ızgarasını korur. Bir hücreyi bölmek yeni bir ızgara sütunu ekleyebilir ve sağındaki hücrelerin sütun indekslerini değiştirebilir. Aspose.Slides, PowerPoint’in tablo ızgara modelini izler.

Bu örnek, 70 puanlık sütun ve satırlara sahip 4x4 bir tablo oluşturur ve (1, 1) hücresinde splitByWidth yöntemini çağırır. Hücrenin 70 puanlık genişliğinin yarısı iki eşit genişlikte hücre oluşturmak için kullanılır.

Bu bölünmeden sonra iki yarı table.get_Item(1, 1) ve table.get_Item(2, 1) olarak erişilir. Tablo ızgarası artık beş sütuna sahiptir: başlangıçta 2 ve 3. sütunlarda bulunan hücreler sırasıyla 3 ve 4. sütunlara taşır. Satır indeksleri değişmez. Bölünme sonrasında hücrelere erişirken bu güncellenmiş sütun indekslerini kullanın.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    double[] columnWidths = { 70, 70, 70, 70 };
    double[] rowHeights = { 70, 70, 70, 70 };
    ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);

    table.get_Item(1, 1).splitByWidth(table.get_Item(1, 1).getWidth() / 2);

    presentation.save("split_cells.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Satır veya Sütun Kapsamına Göre Birleştirilmiş Hücreleri Bölme

Veri doldurmak için birleştirilmiş şablon hücrelerini hazırlamak amacıyla, mevcut bir satır sınırı boyunca bölmek için splitByRowSpan ve bir sütun sınırı boyunca bölmek için splitByColSpan yöntemlerini kullanın.

index argümanı, bölmenin üst kısmındaki satırları veya sol kısmındaki sütunları sayar; birleştirilmiş bölgeye göre görelidir:

Örnek, sunumun ilk slaydındaki ilk şeklin bir tablo olmasını ve (1, 2) ile (1, 3) hücrelerinin dikey olarak birleştirilmiş olmasını varsayar. Alt konumdan başlayarak, kökeni bulmak için getFirstColumnIndex ve getFirstRowIndex yöntemlerini kullanır ve her iki kapsamı da kontrol eder. splitByRowSpan(1) ardından ürün adları için satır 2 ve 3’ü ayırır. Yatay iki sütun birleştirmesi için splitByColSpan(1) kullanın.

import com.aspose.slides.*;

Presentation presentation = new Presentation("table_template.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    ITable table = (ITable) slide.getShapes().get_Item(0);

    ICell selectedCell = table.get_Item(1, 3);
    int firstColumnIndex = selectedCell.getFirstColumnIndex();
    int firstRowIndex = selectedCell.getFirstRowIndex();
    ICell mergedCell = table.get_Item(firstColumnIndex, firstRowIndex);

    if (mergedCell.isMergedCell() && mergedCell.getRowSpan() == 2 && mergedCell.getColSpan() == 1)
    {
        mergedCell.splitByRowSpan(1);

        // Bölme işleminden sonra tablodan oluşan hücreleri al.
        ICell upperCell = table.get_Item(firstColumnIndex, firstRowIndex);
        ICell lowerCell = table.get_Item(firstColumnIndex, firstRowIndex + 1);
        System.out.println("Upper cell merged: " + upperCell.isMergedCell());
        System.out.println("Lower cell merged: " + lowerCell.isMergedCell());

        upperCell.getTextFrame().setText("Product A");
        lowerCell.getTextFrame().setText("Product B");

        presentation.save("split_template.pptx", SaveFormat.Pptx);
    }
    else
    {
        System.out.println("Select a merged region spanning exactly two rows and one column.");
    }
} finally {
    presentation.dispose();
}

Tablo ızgarası ve çevredeki hücre indeksleri değişmeden kalır. Oluşan hücreleri koordinatlarıyla alın; burada her ikisi de 1 kapsama sahiptir ve isMergedCell false yazdırır. Daha büyük bölgeler bir bölünmeden sonra kısmen birleştirilmiş kalabilir.

Orijinal metin ve biçimlendirmesi üst (veya sol) hücrede kalır; yeni hücre boş olur ancak doldurma, kenarlıklar ve kenar boşlukları gibi hücre biçimlendirmesini devralır. Hücreleri bölünmeden sonra doldurun ve gerekli metin biçimlendirmesini açıkça ayarlayın.

Kaydedilen sunum, şablonun hücre biçimlendirmesini koruyan ayrı “Product A” ve “Product B” hücrelerini içerir. Detaylar için Cell API Referansı sayfasına bakın.

Tablo Hücresi Arka Plan Rengini Değiştirme

Bu örnek, 150 puanlık sütunlar ve 50 puanlık satırlara sahip bir tablo oluşturur. Katı bir dolgu seçmek için setFillType yöntemini kullanır ve getSolidFillColor tarafından döndürülen rengi, üçüncü sütun ve dördüncü satırdaki (2, 3) hücresi için kırmızı olarak ayarlar.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    double[] columnWidths = { 150, 150, 150, 150 };
    double[] rowHeights = { 50, 50, 50, 50, 50 };
    ITable table = slide.getShapes().addTable(50, 50, columnWidths, rowHeights);

    ICell cell = table.get_Item(2, 3);
    cell.getCellFormat().getFillFormat().setFillType(FillType.Solid);
    cell.getCellFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);

    presentation.save("cell_background_color.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Tablo Hücresi İçine Resim Ekleme

Bu örneği çalıştırmadan önce giriş resmini çalışma dizinine koyun. Resmi Images.fromFile yöntemiyle yükler ve sunumun resim koleksiyonuna addImage yöntemiyle ekler. Ardından resmi, tablodaki ilk hücre olan (0, 0) hücresinin resim dolgusuna atar.

PictureFillMode.Stretch resmi hücreyi dolduracak şekilde uzatır ve bu, en‑boy oranını değiştirebilir. Sütun genişlikleri ve satır yükseklikleri puan cinsindendir. Yüklenen resim, sunuma eklendikten sonra bir finally bloğunda serbest bırakılır.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    
    double[] columnWidths = { 150, 150, 150, 150 };
    double[] rowHeights = { 100, 100, 100, 100, 90 };
    ITable table = slide.getShapes().addTable(50, 50, columnWidths, rowHeights);

    IPPImage ppImage;
    IImage image = Images.fromFile("aspose_logo.jpg");
    try {
        ppImage = presentation.getImages().addImage(image);
    } finally {
        image.dispose();
    }

    table.get_Item(0, 0).getCellFormat().getFillFormat().setFillType(FillType.Picture);
    table.get_Item(0, 0).getCellFormat().getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
    table.get_Item(0, 0).getCellFormat().getFillFormat().getPictureFillFormat().getPicture().setImage(ppImage);

    presentation.save("table_cell_with_image.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

SSS

Tek bir hücrenin farklı kenarları için farklı çizgi kalınlıkları ve stiller ayarlayabilir miyim?

Evet. üst/alt/sol/sağ kenarlıkların ayrı özellikleri vardır, bu nedenle her bir kenarın kalınlığı ve stili farklı olabilir.

Bir resmi hücrenin arka planı olarak ayarladıktan sonra sütun/satır boyutunu değiştirirsem ne olur?

Davranış, doldurma modu (stretch/tile) bağlıdır. Uzatıldığında, resim yeni hücreye göre ayarlanır; döşendiğinde ise karolar yeniden hesaplanır.

Bir hücrenin tüm içeriğine bir bağlantı ekleyebilir miyim?

Hyperlinks hücrenin metin çerçevesindeki metin (parça) seviyesinde ya da tüm tablo/şekil seviyesinde ayarlanır. Pratikte, bağlantıyı bir parçaya ya da hücredeki tüm metne atarsınız.

Tek bir hücre içinde farklı yazı tipleri ayarlayabilir miyim?

Evet. Bir hücrenin metin çerçevesi, bağımsız biçimlendirmeye sahip portions (run’lar) - yazı tipi ailesi, stil, boyut ve renk - destekler.