C++'ta Tablolarla Çalışma

C++'ta Tablolarla Çalışma

Aspose.Slides FOSS for C++ supports creating tables on slides with configurable column widths and row heights. This guide shows how to add a table, populate it with data, and apply basic text formatting to cells.

Adım Adım Kılavuz

Adım 1: Kütüphaneyi Derleyin ve Bağlayın

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

Adım 2: Bir Sunum Oluşturun veya Açın

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    // ... add table ...
    prs.save("table.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Adım 3: Sütun Genişliklerini ve Satır Yüksekliklerini Tanımlayın

Tablolar, nokta cinsinden (1 nokta = 1/72 inç) açık sütun genişlikleri ve satır yükseklikleri gerektirir. Standart bir slayt 720 nokta genişliğinde ve 540 nokta yüksekliğindedir.

std::vector<double> col_widths = {200.0, 150.0, 150.0};  // 3 columns
std::vector<double> row_heights = {45.0, 40.0, 40.0};    // 3 rows

Adım 4: Tabloyu Ekleyin

slide.shapes().add_table(x, y, col_widths, row_heights) tabloyu konumda oluşturur (x, y):

#include <Aspose/Slides/Foss/presentation.h>
#include <vector>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    std::vector<double> col_widths = {200.0, 150.0, 150.0};
    std::vector<double> row_heights = {45.0, 40.0, 40.0};
    auto& table = slide.shapes().add_table(50, 100, col_widths, row_heights);

    prs.save("table.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Adım 5: Hücre Metnini Ayarlayın

Hücrelere şunun aracılığıyla erişin table.rows()[row_index][col_index] ve metni şunun aracılığıyla atayın .text_frame()->set_text():

#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    std::vector<double> col_widths = {200.0, 150.0, 150.0};
    std::vector<double> row_heights = {45.0, 40.0, 40.0};
    auto& table = slide.shapes().add_table(50, 100, col_widths, row_heights);

    // Header row (row 0)
    std::vector<std::string> headers = {"Product", "Units Sold", "Revenue"};
    for (size_t col = 0; col < headers.size(); ++col) {
        table.rows()[0][col].text_frame()->set_text(headers[col]);
    }

    // Data rows
    std::vector<std::vector<std::string>> data = {
        {"Widget A", "1,200", "$24,000"},
        {"Widget B", "850",   "$17,000"},
    };
    for (size_t r = 0; r < data.size(); ++r) {
        for (size_t c = 0; c < data[r].size(); ++c) {
            table.rows()[r + 1][c].text_frame()->set_text(data[r][c]);
        }
    }

    prs.save("sales-table.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Adım 6: Başlık Hücresi Metnini Biçimlendirin

Başlık hücrelerine kalın biçimlendirme uygulamak için şunu kullanın PortionFormat:

for (size_t col = 0; col < headers.size(); ++col) {
    auto& cell = table.rows()[0][col];
    auto& portions = cell.text_frame()->paragraphs()[0].portions();
    if (portions.size() > 0) {
        auto& fmt = portions[0].portion_format();
        fmt.set_font_bold(asf::NullableBool::TRUE);
        fmt.fill_format().set_fill_type(asf::FillType::SOLID);
        fmt.fill_format().solid_fill_color().set_color(
            asf::Color::from_argb(255, 255, 255, 255));
    }
}

Tam Çalışan Örnek

#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    std::vector<std::vector<std::string>> data_rows = {
        {"North", "$1.2M", "+8%"},
        {"South", "$0.9M", "+4%"},
        {"East",  "$1.5M", "+12%"},
        {"West",  "$0.7M", "+2%"},
    };
    std::vector<std::string> headers = {"Region", "Revenue", "Growth"};

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    std::vector<double> col_widths = {180.0, 140.0, 120.0};
    std::vector<double> row_heights(1 + data_rows.size(), 38.0);
    row_heights[0] = 45.0;

    auto& table = slide.shapes().add_table(60, 80, col_widths, row_heights);

    // Header row
    for (size_t col = 0; col < headers.size(); ++col) {
        auto& cell = table.rows()[0][col];
        cell.text_frame()->set_text(headers[col]);
        auto& portions = cell.text_frame()->paragraphs()[0].portions();
        if (portions.size() > 0) {
            portions[0].portion_format().set_font_bold(asf::NullableBool::TRUE);
        }
    }

    // Data rows
    for (size_t r = 0; r < data_rows.size(); ++r) {
        for (size_t c = 0; c < data_rows[r].size(); ++c) {
            table.rows()[r + 1][c].text_frame()->set_text(data_rows[r][c]);
        }
    }

    prs.save("regional-revenue.pptx", asf::SaveFormat::PPTX);
    std::cout << "Saved regional-revenue.pptx\n";
    return 0;
}

Yaygın Sorunlar ve Çözümler

std::out_of_range erişirken table.rows()[row][col]

Satır ve sütun indeksleri sıfır tabanlıdır. Eğer tanımladıysanız row_heights 3 öğe ile, geçerli satır indeksleri 0, 1, 2’dir.

Hücre metni kaydedilen dosyada görünmüyor

Her zaman şunun aracılığıyla atayın .text_frame()->set_text(), şunun aracılığıyla değil .set_text() hücre nesnesi üzerinde doğrudan.

Tablo konumu slayttan dışarıda

Şunu kontrol edin x + sum(col_widths) <= 720 ve y + sum(row_heights) <= 540 standart bir slayt için.


Sık Sorulan Sorular

Tablo hücrelerini birleştirebilir miyim?

Bu sürümde hücre birleştirme desteklenmiyor.

Tüm tabloya bir arka plan rengi uygulayabilir miyim?

Dolgu biçimlendirmesini her bir hücreye uygulayın:

for (size_t r = 0; r < table.rows().size(); ++r) {
    for (size_t c = 0; c < table.rows()[r].size(); ++c) {
        auto& cell = table.rows()[r][c];
        cell.fill_format().set_fill_type(asf::FillType::SOLID);
        cell.fill_format().solid_fill_color().set_color(
            asf::Color::from_argb(255, 240, 248, 255));
    }
}

Hücre kenarlık stillerini ayarlayabilir miyim?

Hücre kenarlık özelliklerine hücre biçim kenarlık yöntemleri aracılığıyla erişilebilir. Kenarlık biçim özelliklerinin tam listesi için API referansına bakın.


Ayrıca Bakınız

 Türkçe