Kelola Tabel Presentasi dalam C++
Pendahuluan
Tabel di PowerPoint adalah cara yang efisien untuk menampilkan dan menggambarkan informasi. Informasi dalam kisi sel (diatur dalam baris dan kolom) sederhana dan mudah dipahami.
Aspose.Slides menyediakan kelas Table, antarmuka ITable, kelas Cell, antarmuka ICell, dan tipe lainnya untuk memungkinkan Anda membuat, memperbarui, dan mengelola tabel dalam segala jenis presentasi.
Membuat Tabel dari Awal
- Buat instance kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Tentukan array
columnWidth. - Tentukan array
rowHeight. - Tambahkan objek ITable ke slide melalui metode AddTable.
- Iterasi setiap ICell untuk menerapkan pemformatan pada batas atas, bawah, kanan, dan kiri.
- Gabungkan dua sel pertama pada baris pertama tabel.
- Akses TextFrame milik sebuah ICell.
- Tambahkan teks ke TextFrame.
- Simpan presentasi yang telah dimodifikasi.
Kode C++ ini menunjukkan cara membuat tabel dalam presentasi:
#include <DOM/FillType.h>
#include <DOM/IColorFormat.h>
#include <DOM/ILineFillFormat.h>
#include <DOM/ILineFormat.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ICellFormat.h>
#include <DOM/Table/IRow.h>
#include <DOM/Table/IRowCollection.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
// Membuat instance kelas Presentation yang mewakili file PPTX
auto pres = System::MakeObject<Presentation>();
// Mengakses slide pertama
auto sld = pres->get_Slides()->idx_get(0);
// Mendefinisikan kolom dengan lebar dan baris dengan tinggi
auto dblCols = System::MakeArray<double>({ 50, 50, 50 });
auto dblRows = System::MakeArray<double>({ 50, 30, 30, 30, 30 });
// Menambahkan shape tabel ke slide
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Mengatur format batas untuk setiap sel
for (int32_t row = 0; row < tbl->get_Rows()->get_Count(); row++)
{
for (int32_t cell = 0; cell < tbl->get_Rows()->idx_get(row)->get_Count(); cell++)
{
auto cellFormat = tbl->get_Rows()->idx_get(row)->idx_get(cell)->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType((FillType::Solid));
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Menggabungkan sel 1 dan 2 pada baris 1
tbl->MergeCells(tbl->get_Rows()->idx_get(0)->idx_get(0), tbl->get_Rows()->idx_get(1)->idx_get(1), false);
// Menambahkan teks ke sel yang digabungkan
tbl->get_Rows()->idx_get(0)->idx_get(0)->get_TextFrame()->set_Text(u"Merged Cells");
// Menyimpan presentasi ke Disk
pres->Save(u"table.pptx", SaveFormat::Pptx);
Penomoran dalam Tabel Standar
Dalam tabel standar, penomoran sel bersifat sederhana dan dimulai dari nol. Sel pertama dalam tabel memiliki indeks 0,0 (kolom 0, baris 0).
Sebagai contoh, sel-sel dalam tabel dengan 4 kolom dan 4 baris diberi nomor seperti ini:
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
Kode C++ ini menunjukkan cara menentukan penomoran untuk sel-sel dalam tabel:
#include <DOM/FillType.h>
#include <DOM/IColorFormat.h>
#include <DOM/IFillFormat.h>
#include <DOM/ILineFillFormat.h>
#include <DOM/ILineFormat.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ICellFormat.h>
#include <DOM/Table/IRow.h>
#include <DOM/Table/IRowCollection.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
// Membuat instance kelas Presentation yang mewakili file PPTX
auto pres = System::MakeObject<Presentation>();
// Mengakses slide pertama
auto sld = pres->get_Slides()->idx_get(0);
// Mendefinisikan kolom dengan lebar dan baris dengan tinggi
auto dblCols = System::MakeArray<double>({ 70, 70, 70, 70 });
auto dblRows = System::MakeArray<double>({ 70, 70, 70, 70 });
// Menambahkan shape tabel ke slide
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Mengatur format batas untuk setiap sel
for (const auto& row : tbl->get_Rows())
{
for (const auto& cell : row)
{
auto cellFormat = cell->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Menyimpan presentasi ke disk
pres->Save(u"StandardTables_out.pptx", SaveFormat::Pptx);
Mengakses Tabel yang Ada
-
Buat instance kelas Presentation.
-
Dapatkan referensi ke slide yang berisi tabel melalui indeksnya.
-
Buat objek ITable dan setel menjadi null.
-
Iterasi semua objek IShape hingga tabel ditemukan.
Jika Anda menduga slide yang sedang Anda kerjakan hanya berisi satu tabel, Anda dapat memeriksa semua shape yang ada di dalamnya. Ketika sebuah shape diidentifikasi sebagai tabel, Anda dapat melakukan typecast menjadi objek Table. Namun jika slide yang sedang Anda kerjakan berisi beberapa tabel, lebih baik mencari tabel yang diperlukan melalui set_AlternativeText.
-
Gunakan objek ITable untuk bekerja dengan tabel. Pada contoh di bawah, kami menambahkan baris baru ke tabel.
-
Simpan presentasi yang telah dimodifikasi.
Kode C++ ini menunjukkan cara mengakses dan bekerja dengan tabel yang ada:
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <system/enumerator_adapter.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
// Membuat instance kelas Presentation yang mewakili file PPTX
auto pres = System::MakeObject<Presentation>(u"UpdateExistingTable.pptx");
// Mengakses slide pertama
auto sld = pres->get_Slides()->idx_get(0);
// Menginisialisasi Table null
System::SharedPtr<ITable> tbl;
// Mengiterasi shape dan menetapkan referensi ke tabel yang ditemukan
for (const auto& shp : System::IterateOver(sld->get_Shapes()))
{
if (System::ObjectExt::Is<ITable>(shp))
{
tbl = System::ExplicitCast<ITable>(shp);
}
}
// Menetapkan teks untuk kolom pertama baris kedua
tbl->idx_get(0, 1)->get_TextFrame()->set_Text(u"New");
// Menyimpan presentasi yang dimodifikasi ke disk
pres->Save(u"table1_out.pptx", SaveFormat::Pptx);
Temukan Sel yang Memiliki Text Frame
Saat kode pemrosesan teks generik menerima sebuah ITextFrame dari tabel, gunakan ITextFrame::get_ParentCell untuk mengambil ICell yang memilikinya. Untuk text frame sel tabel, ITextFrame::get_ParentCell mengembalikan pemiliknya dan ITextFrame::get_ParentShape mengembalikan nullptr, meskipun tabel itu sendiri adalah sebuah shape.
Koordinat sel tersedia melalui metode hanya-baca ICell::get_FirstColumnIndex dan ICell::get_FirstRowIndex. ITextFrame::get_ParentCell juga menyediakan navigasi hanya-baca: ia mengembalikan pemilik tetapi tidak mengubah kepemilikan. Selalu periksa apakah sel yang dikembalikan bernilai nullptr sebelum menggunakannya.
Untuk contoh lengkap yang mengidentifikasi pemilik sel tabel dan shape, termasuk shape yang terkait dengan node SmartArt, lihat Search and Replace Text.
Menyelaraskan Teks dalam Tabel
- Buat instance kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Tambahkan objek ITable ke slide.
- Akses objek ITextFrame dari tabel.
- Akses IParagraph milik ITextFrame.
- Selaraskan teks secara vertikal.
- Simpan presentasi yang telah dimodifikasi.
Kode C++ ini menunjukkan cara menyelaraskan teks dalam tabel:
#include <DOM/FillType.h>
#include <DOM/IColorFormat.h>
#include <DOM/IFillFormat.h>
#include <DOM/IParagraph.h>
#include <DOM/IParagraphCollection.h>
#include <DOM/IPortion.h>
#include <DOM/IPortionCollection.h>
#include <DOM/IPortionFormat.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ICell.h>
#include <DOM/Table/ITable.h>
#include <DOM/TextAnchorType.h>
#include <DOM/TextVerticalType.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;
// Membuat instance kelas Presentation
auto presentation = System::MakeObject<Presentation>();
// Mendapatkan slide pertama
auto slide = presentation->get_Slides()->idx_get(0);
// Mendefinisikan kolom dengan lebar dan baris dengan tinggi
auto dblCols = System::MakeArray<double>({ 120, 120, 120, 120 });
auto dblRows = System::MakeArray<double>({ 100, 100, 100, 100 });
// Menambahkan shape tabel ke slide
auto tbl = slide->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
tbl->idx_get(1, 0)->get_TextFrame()->set_Text(u"10");
tbl->idx_get(2, 0)->get_TextFrame()->set_Text(u"20");
tbl->idx_get(3, 0)->get_TextFrame()->set_Text(u"30");
// Mengakses frame teks
auto txtFrame = tbl->idx_get(0, 0)->get_TextFrame();
// Membuat objek Paragraph untuk frame teks
auto paragraph = txtFrame->get_Paragraphs()->idx_get(0);
// Membuat objek Portion untuk paragraf
auto portion = paragraph->get_Portions()->idx_get(0);
portion->set_Text(u"Text here");
portion->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
portion->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Black());
// Menyelaraskan teks secara vertikal
auto cell = tbl->idx_get(0, 0);
cell->set_TextAnchorType(TextAnchorType::Center);
cell->set_TextVerticalType(TextVerticalType::Vertical270);
// Menyimpan Presentation ke disk
presentation->Save(u"Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
Mengatur Pemformatan Teks pada Tingkat Tabel
- Buat instance kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Akses objek ITable dari Slide.
- Setel set_FontHeight untuk teks.
- Setel set_Alignment dan set_MarginRight.
- Setel set_TextVerticalType.
- Simpan presentasi yang telah dimodifikasi.
Kode C++ ini menunjukkan cara menerapkan opsi pemformatan pilihan Anda pada teks dalam tabel:
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ParagraphFormat.h>
#include <DOM/PortionFormat.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ITable.h>
#include <DOM/TextAlignment.h>
#include <DOM/TextFrameFormat.h>
#include <DOM/TextVerticalType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
// Membuat instance kelas Presentation
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
// Anggap bahwa shape pertama pada slide pertama adalah tabel
auto someTable = System::AsCast<ITable>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Mengatur tinggi font sel tabel
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->SetTextFormat(portionFormat);
// Mengatur perataan teks sel tabel dan margin kanan dalam satu panggilan
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->SetTextFormat(paragraphFormat);
// Mengatur tipe vertikal teks sel tabel
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->SetTextFormat(textFrameFormat);
presentation->Save(u"result.pptx", SaveFormat::Pptx);
Mendapatkan Properti Gaya Tabel
Aspose.Slides memungkinkan Anda mengambil properti gaya untuk sebuah tabel sehingga Anda dapat menggunakan detail tersebut pada tabel lain atau di tempat lain. Kode C++ ini menunjukkan cara mendapatkan properti gaya dari style prasetel tabel:
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ITable.h>
#include <DOM/TableStylePreset.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slide(0)->get_Shapes();
auto table = System::ExplicitCast<ITable>(shapes->AddTable(10, 10, System::MakeArray<double>({100, 150}), System::MakeArray<double>({5, 5, 5})));
table->set_StylePreset(TableStylePreset::DarkStyle1);
pres->Save(u"table.pptx", SaveFormat::Pptx);
Kunci Rasio Aspek Tabel
Rasio aspek sebuah shape geometrik adalah perbandingan ukuran dalam dimensi yang berbeda. Aspose.Slides menyediakan properti AspectRatioLocked() untuk memungkinkan Anda mengunci pengaturan rasio aspek bagi tabel dan shape lainnya.
Kode C++ ini menunjukkan cara mengunci rasio aspek untuk tabel:
#include <DOM/IGraphicalObjectLock.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <DOM/Table/ITable.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto pres = System::MakeObject<Presentation>(u"pres.pptx");
auto table = System::ExplicitCast<ITable>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
table->get_GraphicalObjectLock()->set_AspectRatioLocked(!table->get_GraphicalObjectLock()->get_AspectRatioLocked());
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
pres->Save(u"pres-out.pptx", SaveFormat::Pptx);
FAQ
Apakah saya dapat mengaktifkan arah baca right-to-left (RTL) untuk seluruh tabel dan teks di sel-selnya?
Ya. Tabel menyediakan metode set_RightToLeft, dan paragraf memiliki ParagraphFormat::set_RightToLeft. Menggunakan keduanya memastikan urutan RTL yang benar serta rendering di dalam sel.
Bagaimana saya dapat mencegah pengguna memindahkan atau mengubah ukuran tabel dalam file akhir?
Gunakan shape locks untuk menonaktifkan pemindahan, pengubahan ukuran, pemilihan, dll. Kunci ini juga berlaku untuk tabel.
Apakah menyisipkan gambar di dalam sel sebagai latar belakang didukung?
Ya. Anda dapat mengatur picture fill untuk sebuah sel; gambar akan menutupi area sel sesuai mode yang dipilih (stretch atau tile).