Как да работим с таблици в C++
Aspose.Slides FOSS for C++ поддържа създаване на таблици в слайдове с конфигурируеми ширини на колоните и височини на редовете. Това ръководство показва как да добавите таблица, да я попълните с данни и да приложите основно форматиране на текста в клетките.
Ръководство стъпка по стъпка
Стъпка 1: Създаване и свързване на библиотеката
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 .Стъпка 2: Създаване или отваряне на презентация
#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;
}Стъпка 3: Определете ширини на колоните и височини на редовете
Таблиците изискват явни ширини на колоните и височини на редовете в точки (1 точка = 1/72 инч). Стандартният слайд е широк 720 точки и висок 540 точки.
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
Стъпка 4: Добавете таблицата
slide.shapes().add_table(x, y, col_widths, row_heights) създава таблицата на позиция (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;
}Стъпка 5: Задаване на текст в клетка
Достъпвайте клетки чрез table.rows()[row_index][col_index] и задавайте текст чрез .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;
}Стъпка 6: Форматиране на текста в заглавната клетка
Приложете удебеляване на заглавните клетки, използвайки 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));
}
}Пълен работещ пример
#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;
}Чести проблеми и решения
std::out_of_range при достъпване table.rows()[row][col]
Индексите на редовете и колоните започват от нула. Ако сте дефинирали row_heights с 3 елемента, валидните индекси на редовете са 0, 1, 2.
Текстът в клетката не се появява в запазения файл
Винаги задавайте чрез .text_frame()->set_text(), а не чрез .set_text() директно върху обекта на клетката.
Позицията на таблицата е извън слайда
Проверете, че x + sum(col_widths) <= 720 и y + sum(row_heights) <= 540 са за стандартен слайд.
Често задавани въпроси
Мога ли да обединя клетки в таблицата?
Сливането на клетки не се поддържа в това издание.
Мога ли да приложа цвят на фона за цялата таблица?
Приложете форматиране на запълване към всяка отделна клетка:
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));
}
}Мога ли да задавам стилове на граници на клетки?
Свойствата на границата на клетката са достъпни чрез методите за граница на форматирането на клетката. Вижте справочника на API за пълен списък с атрибутите на форматирането на границата.